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

2021-09-29 04:55:07 字數 2406 閱讀 9751

(1)任何乙個物件a均有乙個唯一的id識別號,用內建函式id(a)來獲得該號。在cpython中,id(a)表示物件a在記憶體中的位址。

id(object) -> integer

return the identity of an object.  this is guaranteed to be unique among

simultaneously existing objects. (hint: it's the object's memory address.)

可以用"is"語句判斷兩個物件的識別號是否一致,例如 a is b,而a == b是比較兩者的值。

(2)python中的變數可分為可變型別和不可變型別。

不可變型別包括:數字(int, float)、字串、元組、布林、日期

可變型別包括:列表、字典、集合

不可變型別表示不允許變數的值發生變化,如果改變了變數的值,相當於是新建了乙個物件。可變型別表示該型別的變數可以原地修改。

判斷變數的型別是可變型別還是不可變型別,可以通過修改該變數前後id值是否發生變化來判斷,如id發生變化,則為不可變型別,反之為可變型別。(注:元組不支援該操作,因為元組預設不可變)。

a = 3

print(id(a))

a = 4

print(id(a))

b = 'hello'

print(id(b))

b = 'hello world'

print(id(b))

c = [1,2,3]

print(id(c))

print(id(c))

d =

print(id(d))

d.pop('c')

print(id(d))

e=print(id(e))

e.add(4)

e.remove(1)

print(id(e))

以上三段**執行發現,修改列表、字典、集合變數的值時,變數的id值不發生任何改變,說明這三種資料型別均為可變型別。

(3)可變型別內部包含不可變型別的情況

a=['abc',1,2]

print(id(a),id(a[0]))

a[0] = 'efg'

print(id(a),id(a[0]))

執行結果:

322594056 12223552

322594056 325218816

說明修改可變型別變數列表內部的不可變物件字串時,列表的id不發生變化,但內部的不可變型別物件的字串物件的id值發生了變化。

(4)小資料池

a = 3

b = 3

print(id(a) == id(b))

執行結果:true

a = 300

b = 300

print(id(a) == id(b))

執行結果:false

python自動將-5~256的整數進行了快取,當你將這些整數賦值給變數時,並不會重新建立物件,而是使用已經建立好的快取物件。

對於字串變數,當字串的長度》1,且只含有大小寫字母,數字,下劃線時,才會預設駐留。當字串變數的長度為0或者1,使用小資料池。

a = 'hello_2020'

b = 'hello_2020'

print(id(a) == id(b))

a = 'hello world'

b = 'hello world'

print(id(a) == id(b))

執行結果:

true

false

對於bool變數同樣適用小資料池。

a = true

b = true

print(id(a) == id(b))

執行結果:

true

以上情況外,均不使用小資料池,例如:

a = [1,2,3,4]

b = [1,2,3,4]

print(id(a) == id(b))

執行結果:

false

(5)知識檢驗

例1:

a = 'abc'

a.capitalize()

print(a)

執行結果是 abc,為什麼不是abc?

例2:

a =[100,200,300]

print(a)

執行結果:none,為什麼不是[100, 200, 300, 400]

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 並...