不可變資料型別在第一次宣告賦值的時候,會在記憶體中開闢一塊空間,用來存放這個變數被賦的值,而這個變數實際上儲存的, 並不是被賦予的這個值, 而是存放這個值所在空間的記憶體位址, 通過這個位址, 變數就可以在記憶體中取出資料了. 所謂不可變就是說, 我們不能改變這個資料在記憶體中的值, 所以當我們改變這個變數的賦值時, 只是在記憶體中重新開闢了一塊空間, 將這一條新的資料存放在這乙個新的記憶體位址裡, 而原來的那個變數就不在引用原資料的記憶體位址而轉為引用新資料的記憶體位址了.
示例:
>>
一開始x = 18,開闢一塊位址為4497811200的記憶體,即18對應的位址為4497811200,後來x = 19 ,重新開闢一塊位址為4497811232的記憶體來放19,**可以看到不變的意思是指18,和19在記憶體中的位址不會改變,**將18賦值給y時,y指向的位址即為4497811200。
結合不可變資料型別,可變資料型別就很好理解來,可變資料型別是指變數所指向的記憶體位址處的值是可以被改變的。
>>
> x =[1
,2,3
]>>
>
id(x)
>>
> y =[1
,2,3
]>>
> z =[1
,2,3
]>>
>
id(y)
>>
>
id(z)
注:
不可變型別:當該資料型別的對應變數的值發生了改變,那麼它對應的記憶體位址也會發生改變,對於這種資料型別,就稱不可變資料型別。
可變資料型別:當該資料型別的對應變數的值發生了改變,那麼它對應的記憶體位址不發生改變,對於這種資料型別,就稱可變資料型別。
#a的值改變了,a對應的記憶體位址也改變了
>>
> a=
1>>
>
id(a)
>>
> a =
2>>
>id(
2)#直接對a操作,相當於拷貝了乙份a的值,在其他記憶體位址操作,a的值不變
>>
> a+
1>>
>
id(a)
>>
> a
#b的值改變了,b對應的記憶體位址不變,第一次給b賦值的時候,給b劃分一塊記憶體空間,該空間就不變了
>>
> b =[1
,2,3
]>>
>
id(b)
#直接對b操作,b的值改變,b指向的記憶體空間不變
>>4)
>>
>
id(b)
>>
> b[1
,2,3
,4]>>
>
不可變:number(數字)、string(字串)、tuple(元組)。
#整型
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
元組被稱為唯讀列表,即資料可以被查詢,但不能被修改。
可變:set(集合)、list(列表)、dictionary(字典)。
#集合
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))
list
'djx'
)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可變型別與不可變型別
學習版本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 可變型別與不可變型別
可變型別 值改變,id不變,證明改的是原值,證明原值是可以被改變的 不可變型別 值改變,id也變了,證明是產生新的值,壓根沒有改變原值,證明原值是不可以被修改的 x 10print id x x 11 print id x 將x的值修改後,原值 10 無法被改變,在記憶體中建立新的位址儲存 11 並...
Python可變型別與不可變型別
可變型別 可以通過一些操作來改變自身的值。例如 列表是一種可變型別,我們可以通過索引來改變的值 通過呼叫方法改變他的值 通過del關鍵字來改變他的值。不可變的型別 不能通過這些操作來改變他的值。例如 字串是一種不可變的型別,不能通過索引來改變他的值 呼叫字串的方法會返回乙個新的字串,並不改變原來的值...