Python 的可變和不可變物件詳情

2022-09-25 05:36:10 字數 2221 閱讀 9333

目錄

1、可變與不可變物件歸類

2、可變與可變物件的區別

3、不可變物件的應用場景

它們在需要常量雜湊值的地方起著重要作用,例如作為字典中的鍵

從記憶體角度出發說下有什麼區別?

不可變物件:

可變物件:

變的是:原來物件的內容,不會建立新物件,而變數也還是指向原物件

1、不可變物件-整型

a = 123

b = a

print(id(a))

print(id(b))

print(a, b)

a += 2

print(id(a))

print(id(b))

print(a, b)

# 輸出結果

4473956912

4473956912

123 123

4473956976

4473956912

125 123

可以看看下面的圖

首先,這是乙個記憶體區域

原理:k**qxke

2、不可變物件-字串

a = "test"

b = a

print(id(a))

print(id(b))

print(a, b)

a += "123"

print(id(a))

print(id(b))

print(a, b)

# 輸出結果

4455345392

445534539

test test

4455818288

4455345392

test123 test

3、不可變物件-元組

a = (1, 2, 3)

b = a

print(id(a))

print(id(b))

print(a, b)

a = a + a

print(id(a))

print(id(b))

print(a, b)

# 輸出結果

4455410240

4455410240

(1, 2, 3) (1, 2, 3)

4455359200

4455410240

(1, 2, 3, 1, 2, 3) (1, 2, 3)

4、可變物件列表

# 列表

a = [1, 2, 3]

b = a

print(id(a))

print(id(b))

print(a, b)

a += [4, 5, 6]

print(a, b)

print(id(a))

print(id(b))

# 輸出結果

4327665856

4327665856

[1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6]

4327665856

4327665856

能看到 a 變數修改值之後,b 的值也隨之修改了

可以看看下面的圖

這裡先提前講下函式的入門,因為引數傳遞是個挺重要的點

概念:www.cppcns.com

1、引數傳遞不可變物件

# 函式

def test_no_define(age, name):

age = 123

name = "poloyy"

print(age, name)

age = 1

name = "yy"

print(age, name)

test_no_define(age, name)

print(age, name)

# 輸出結果

1 yy

123 poloyy

1 yy

2、引數傳遞可變物件

# 函式

def test_define(dicts, sets):

dicts['age'] = 24

sets.pop()

print(dicts, sets)

dicts =

sets =

print(dicts, sets)

test_define(dicts, sets)

print(dicts, sets)

# 輸出結果

1 yy

總結:

python 可變物件和不可變物件

變數沒有型別,那麼就意味著它可以隨意指向任何物件。python中的變數相當於乙個指標。當將乙個變數a賦值給另乙個變數b時,無論變數a指向的是可變物件還是不可變物件,變數b指向變數a指向的物件。例 alist 1 2,3 anolist alist id alist id anolist true b...

Python可變物件和不可變物件

python中一切皆物件,每個物件都有其唯一的id,對應的型別和值,其中id指的是物件在記憶體中的位置。根據物件的值是否可修改分為可變物件和不可變物件。其中,不可物件包括 數字,字串,tuple,frozenset 不可變集合 可變物件包括 list,dict,set python中的變數可以指向任...

Python 可變物件和不可變物件

python在heap中分配的物件分成兩類 可變物件和不可變物件。所謂可變物件是指,物件的內容是可變的,例如list。而不可變的物件則相反,表示其內容不可變。一 不可變物件 由於python中的變數存放的是物件引用,所以對於不可變物件而言,儘管物件本身不可變,但變數的物件引用是可變的。從上面得知,不...