什麼是可變/不可變物件
不可變物件,該物件所指向的記憶體中的值不能被改變。當改變某個變數時候,由於其所指的值不能被改變,相當於把原來的值複製一份後再改變,這會開闢一個新的地址,變數再指向這個新的地址。
可變物件,該物件所指向的記憶體中的值可以被改變。變數(精確的說是引用)改變後,實際上是其所指的值直接改變,並沒有發生複製行為,也沒有開闢新的出地址,通俗點說就是原地改變。
Python中,數值型別(int和float)、字串str、元組tuple都是不可變型別。而列表list、字典dict、集合set是可變類型。
還是看程式碼比較直觀,看看set集合的程式碼:
abb = {1, 2, 3} acc = abb print(id(abb), id(acc)) acc.add(4) print(abb) # {1, 2, 3, 4} print(id(abb), id(acc)) # 相等
可變物件由於所指物件可以被修改,所以無需複製一份之後再改變,直接原地改變,所以不會開闢新的內存,改變前後id不變。
當然不可變物件就不是這樣了, 可以和這個對比一下
abc = 3 dd = abc dd = 43 print(abc) # 3,并不随dd的改变而改变
但是如果是拷貝,就僅僅是將內容拷貝過去,傳遞的並是不引用。這在想使用清單的值又不想修改原始清單的時候特別有用。
blist = alist[:] # or alist.copy() print(alist is blist) # False blist.append(4) print(alist) # 还是[1,2 ,3]没有变化
以上是python中set集合屬於可變類型嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!