1. 程式人生 > 其它 >可變物件和不可變物件

可變物件和不可變物件

# Python中的資料型別
'''
內建型別:
字串型別(str)
數值型別(int,float,複數)
布林型別(True,False)
列表(list)
字典(dict)
元組(tuple)
集合(set)

'''

# 1.哪些內建資料型別是可變物件
'''
不可變物件:不可變物件,該物件所指向的記憶體中的值不能被改變。當改變某個變數時候,由於其所指的值不能被改變,相當於把原來的值複製一份後再改變,這會開闢一個新的地址,變數再指向這個新的地址。
通過id()方法檢視指向地址,is判斷是否相同地址

字串
str1 = 'black' ==> 變數a儲存字串black

print(id(str1)) ==> 檢視此時變數a儲存字串black的id

str2 = 'black' ==> 變數b儲存字串black

print(id(str2)) ==> 檢視此時變數b儲存字串black的id

print(id('black')) ==> 檢視字串id
變數a和變數b都儲存了同一個字串black,並且指向的字串的id相同

此時將black進行改變

str1 += 's'
print(id(str1),id(str2),id('black')) ==> 變數str1將儲存的字串改變,地址發生改變

由此可以看出字串是不可變的,不可變物件,變數對應記憶體的值不允許被改變。當變數要改變時,實際上是把原來的值複製一份後再改變,開闢一個新的地址,

元組
tuple1 = (1,2)

tuple2 = (1,2)

print(tuple1 is tuple2) ==> 兩個元組地址相同

tuple1 += 3 ==> 新增一個新的元素

print(tuple1 is tuple2) ==> 兩個元組地址不相同了

元組是不可變物件

--------------------------------------------------------------------------------------------------------

可變物件:可變物件,該物件所指向的記憶體中的值可以被改變。變數(準確的說是引用)改變後,實際上是其所指的值直接發生改變,並沒有發生複製行為,也沒有開闢新的出地址,通俗點說就是原地改變。

列表
list1 = [1,2,3]

list2 = [1,2,3]

print(id(list1),id(list2)) ==> 兩個列表對應不同的地址,可以看出即使值相同的物件也是不同的地址

list1 += [4]

print(id(list1)) ==> 修改了元素,地址也相同,可以理解成一盒餅乾,餅乾吃了一個,盒子還是同一個盒子

所以列表是可變物件,可變物件是允許同一物件的內容,即值可以變化,但是地址是不會變化的。但是需要注意一點,對可變資料型別的操作不能是直接進行新的賦值操作,
另外字典和集合也都是可變物件
'''