Python的可變型別與不可變型別

2021-09-23 01:55:27 字數 1922 閱讀 6385

python的每個物件都分為可變和不可變。在核心型別中

不可變型別:

a =[0

,1,2

]# 來個簡單的list

# 最初,list 和其中各個元素的id 是這樣的。

print

('origin'

)print

(hex(id

(a))

,a)for x in a:

print

(hex(id

(x))

, x)

print

('----------------------'

)# 我們把第乙個元素改改

print

('after change a[0]')a[

0]=4

print

(hex(id

(a))

,a)for x in a:

print

(hex(id

(x))

, x)

print

('----------------------'

)# 我們再把第二個元素改改

print

('after change a[1]')a[

1]=5

print

(hex(id

(a))

,a)for x in a:

print

(hex(id

(x))

, x)

print

('----------------------'

)# 回頭看看直接寫個0 ,id是多少

print

('how about const 0?')n=

0#此時建立乙個整形變數,檢視其記憶體位址

print

(hex(id

(n))

, n)

輸出:

origin

0x2e45ac8 [0, 1, 2]

0x5b57c690 0

0x5b57c6b0 1

0x5b57c6d0 2

after change a[0]

0x2e45ac8 [4, 1, 2]

0x5b57c710 4

0x5b57c6b0 1

0x5b57c6d0 2

after change a[1]

0x2e45ac8 [4, 5, 2]

0x5b57c710 4

0x5b57c730 5

0x5b57c6d0 2

how about const 0?

0x5b57c690 0

總結:看到列表裡的元素0和在列表外定義的乙個普通整形變數指向同乙個記憶體位址,由此得知,對於不可變型別int,無論建立多少個不可變型別,只要值相同,都指向同個記憶體位址。同樣情況的還有比較短的字串。

# 回頭看看直接寫個0 ,id是多少

print

('how about const 0?')n=

0print

(hex(id

(n))

, n)

print

("how about add n itself?"

)n+=

1print

(hex(id

(n))

, n)

輸出:

how about const 0?

0x5b57c690 0

how about add n itself?

0x5b57c6b0 1

相當對不可變型別重新賦值,實際上 n += 1 並不是真的在原有的int物件上+1,而是重新建立乙個n為1的int物件,n引用自這個新的物件。

python可變型別與不可變型別

學習版本3.5.2 python的基礎型別數值 字串和元組都是不可變型別,列表和字典時可變型別 1.number 字串 id 1 4297546560 id 2 4297546592 a 1 id a 4297546560 a 2 id a 4297546592 b 1 id b 429754656...

python可變型別與不可變型別

不可變資料型別在第一次宣告賦值的時候,會在記憶體中開闢一塊空間,用來存放這個變數被賦的值,而這個變數實際上儲存的,並不是被賦予的這個值,而是存放這個值所在空間的記憶體位址,通過這個位址,變數就可以在記憶體中取出資料了.所謂不可變就是說,我們不能改變這個資料在記憶體中的值,所以當我們改變這個變數的賦值...

Python 可變型別與不可變型別

可變型別 值改變,id不變,證明改的是原值,證明原值是可以被改變的 不可變型別 值改變,id也變了,證明是產生新的值,壓根沒有改變原值,證明原值是不可以被修改的 x 10print id x x 11 print id x 將x的值修改後,原值 10 無法被改變,在記憶體中建立新的位址儲存 11 並...