不可變資料型別在第一次宣告賦值宣告的時候, 會在記憶體中開闢一塊空間, 用來存放這個變數被賦的值, 而這個變數實際上儲存的, 並不是被賦予的這個值, 而是存放這個值所在空間的記憶體位址, 通過這個位址, 變數就可以在記憶體中取出資料了. 所謂不可變就是說, 我們不能改變這個資料在記憶體中的值, 所以當我們改變這個變數的賦值時, 只是在記憶體中重新開闢了一塊空間, 將這一條新的資料存放在這乙個新的記憶體位址裡, 而原來的那個變數就不在引用原資料的記憶體位址而轉為引用新資料的記憶體位址了.
舉例子:
>>> x = 18>>>id(x)
4497811200
>>> id(18)
4497811200
>>> x = 19
>>>id(x)
4497811232
>>> id(18)
4497811200
>>> y = 18
>>>id(y)
4497811200
>>>
一開始x = 18,開闢一塊位址為4497811200的記憶體,即18對應的位址為4497811200,後來x = 19 ,重新開闢一塊位址為4497811232的記憶體來放19,可以看到不變的意思是指18,和19在記憶體中的位址不會改變,將18賦值給y時,y指向的位址即為4497811200。
結合不可變資料型別,可變資料型別就很好理解來,可變資料型別是指變數所指向的記憶體位址處的值是可以被改變的。
>>> x = [1,2,3]從另外乙個角度來看:>>>id(x)
4501838920
>>> y = [1,2,3]
>>> z = [1,2,3]
>>>id(y)
4501838600
>>>id(z)
4501838664
可變型別:當該資料型別的對應變數的值發生了改變,那麼它對應的記憶體位址也會發生改變,對於這種資料型別,就稱不可變資料型別。
可變資料型別:當該資料型別的對應變數的值發生了改變,那麼它對應的記憶體位址不發生改變,對於這種資料型別,就稱可變資料型別。
#a的值改變了,a對應的記憶體位址也改變了不可變:number(數字)、string(字串)、tuple(元組)。>>> a=1
>>>id(a)
4497810656
>>> a = 2
>>> id(2)
4497810688
#直接對a操作,相當於拷貝了乙份a的值,在其他記憶體位址操作,a的值不變
>>> a+1
3>>>id(a)
4497810688
>>>a
2#b的值改變了,b對應的記憶體位址不變,第一次給b賦值的時候,給b劃分一塊記憶體空間,該空間就不變了
>>> b = [1,2,3]
>>>id(b)
4501839496
#直接對b操作,b的值改變,b指向的記憶體空間不變
>>>id(b)
4501839496
>>>b
[1, 2, 3, 4]
>>>
#可以變:set(集合)、list(列表)、dictionary(字典)。整型a = 1
(id(a), type(a))
a = 2
(id(a), type(a))
#4361254304
#4361254336
#字串
b = '
anne
(id(b),type(b))
b = '
anne1995
(id(b),type(b))
#4363638744
#4363684784 #元組
c1 = ['
1','2'
]c = (1,2,c1)
(c,id(c),type(c))
c1[1] = '
djx'
(c,id(c),type(c))
#(1, 2, ['1', '2']) 4363948248
#(1, 2, ['1', 'djx']) 4363948248
注意:此時元組的值發生了變化而記憶體位址沒變,但我們依然稱元組為不可變型別,為什麼呢?其實改的是元組中的列表,列表是可變型別,改變了值後位址依然不變。但是元組的定義就是不可變的,
元組被稱為唯讀列表,即資料可以被查詢,但不能被修改。
#集合s =
(s, type(s), id(s))
s.add(
'djx')
(s, type(s), id(s))
# 4401385256
# 4401385256#列表
list = [1,'
q','
qwer
',true]
(list,type(list),id(list))
'djx')
(list,type(list),id(list))
#[1, 'q', 'qwer', true] 4401113608
#[1, 'q', 'qwer', true, 'djx'] 4401113608#字典
tuple = (1)
dic =
d =
(d,type(d),id(d))d['
key4
'] = '
haha
(d,type(d),id(d))
# 4401075976
# 4401075976
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 並...