不可變資料型別在第一次宣告賦值宣告的時候, 會在記憶體中開闢一塊空間, 用來存放這個變數被賦的值, 而這個變數實際上儲存的, 並不是被賦予的這個值, 而是存放這個值所在空間的記憶體位址, 通過這個位址, 變數就可以在記憶體中取出資料了. 所謂不可變就是說, 我們不能改變這個資料在記憶體中的值, 所以當我們改變這個變數的賦值時, 只是在記憶體中重新開闢了一塊空間, 將這一條新的資料存放在這乙個新的記憶體位址裡, 而原來的那個變數就不在引用原資料的記憶體位址而轉為引用新資料的記憶體位址了.
舉例子:
>>> 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
print(id(a), type(a))
a = 2
print(id(a), type(a))
# 4361254304 # 4361254336 #字串
b = 'anne'
print(id(b),type(b))
b = 'anne1995'
print(id(b),type(b))
# 4363638744 # 4363684784 #元組
c1 = ['1','2']
c = (1,2,c1)
print(c,id(c),type(c))
c1[1] = 'djx'
print(c,id(c),type(c))
# (1, 2, ['1', '2']) 4363948248 # (1, 2, ['1', 'djx']) 4363948248
注意:此時元組的值發生了變化而記憶體位址沒變,但我們依然稱元組為不可變型別,為什麼呢?其實改的是元組中的列表,列表是可變型別,改變了值後位址依然不變。但是元組的定義就是不可變的,
元組被稱為唯讀列表,即資料可以被查詢,但不能被修改。
#集合s =
print(s, type(s), id(s))
s.add('djx')
print(s, type(s), id(s))
# 4401385256
# 4401385256
#列表list = [1,'q','qwer',true]
print(list,type(list),id(list))
print(list,type(list),id(list))
# [1, 'q', 'qwer', true] 4401113608
# [1, 'q', 'qwer', true, 'djx'] 4401113608
#字典tuple = (1)
dic =
d =
print(d,type(d),id(d))
d['key4'] = 'haha'
print(d,type(d),id(d))
# 4401075976
# 4401075976
python不可變型別和可變型別
python變數可以分為兩種型別 不可變型別 數字 字串 元組 不可變集合 可變型別 列表 字典 可變集合 python所宣告的變數都以物件的形式存在,存在於機器的固定記憶體之中。可以理解為變數名為物件的指標 如宣告a 3,則a指向儲存3的空間,python通過使用計數器的方式來判斷空間的引用情況,...
python 可變型別和不可變型別
1.什麼是不可變型別 變數對應的值中的資料是不能被修改,如果修改就會生成乙個新的值從而分配新的記憶體空間。不可變型別 數字 int,long,float 布林 bool 字串 string 元組 tuple 2.什麼是可變型別 變數對應的值中的資料可以被修改,但記憶體位址保持不變。可變型別 列表 l...
Python 可變型別和不可變型別總結
可變型別 list,set,dict 不可變型別 int,str,tuple 物件的三要素 value,type,id 判斷type是否相同 true 判斷value是否相同 true 判斷id是否相同 a abc b 123 print id a id b b abc print a is b,i...