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