1. 程式人生 > >可變與不可變類型

可變與不可變類型

查看 mil 字符串 .net 我的博客 垃圾 logs 對象的引用 缺點

1、可變與不可變類型

1)學python一定要記住“一切皆為對象,一切皆為對象的引用”;

2所謂可變對象是指,對象的內容可變,而不可變對象是指對象內容不可變;

3可變數據類型:value值改變,id值不變;不可變數據類型:value值改變,id值也隨之改變。

註:即id不變時,value可以改變則為可變數據類型,value不可以改變則為不可變數據類型。

4不可變immutable):int、字符串(string)float、(數值型number)、元組(tuple)

技術分享圖片

i = 3 (被垃圾回收)

i = 3 + 1 (實際 i = 4

從而可知,不可變對象的特征沒有變,變的只是創建了新對象,改變了變量的對象引用。

技術分享圖片

如圖所示,因為整數為不可變,x,y,z在內存中均指向一個值為1的內存地址,也就是說,x,y,z均指向的是同一個地址

優點:可以減少重復的值對內存空間的占用。

缺點:如上圖所示,修改這個變量綁定的值,如果內存中沒用存在該值的內存塊,那麽必須重新開辟一塊內存,把新地址與變量名綁定。而不是修改變量原來指向的內存塊的值,這會給執行效率帶來一定的降低。

5可變mutable):字典型(dictionary)、列表型(list)

技術分享圖片

技術分享圖片

2如何確定一種數據類型是可變的還是不可變的:

根據可變數據類型與不可變數據類型的概念,只需要在改變value值的同時,使用id()函數查看變量id值是否變化,就可以知道這種數據類型是可變的還是不可變的了。

1)數字

技術分享圖片

數字:從圖中可以看出當數字的值改變時,變量id值也改變了,所以數字是不可變數;

python中為了減少開辟內存造成的時間開銷,對於三位內的整型數字類型數據,在開辟一塊內存空間後,後面的三位內的整型數據都放到這個內存空間中,所以三位以內的整型數字類型的id值都是相同的。

2)字符串

技術分享圖片

從圖中可以看出當字符串的值改變時,變量id值也改變了,所以字符串是不可變數據類型;

3)布爾

技術分享圖片

從圖中可以看出當布爾的值改變時,變量id值也改變了,所以布爾值是不可變數據類型

3)元祖

因為元祖元素是不可修改的,所以元祖是不可變數據類型

4)列表

技術分享圖片

從圖中可以看出,當列表中的某個元素改變時,列表的id值沒有改變,所以列表是可變數據類型;

5)字典

技術分享圖片

從圖中可以看出,當字典的鍵值對的value部分改變時,字典的id值沒有改變,所以字典是可變數據類型

轉載自:https://www.cnblogs.com/xxtalhr/p/9049188.html

我的博客園:https://www.cnblogs.com/yyl102

我的CSDN:https://blog.csdn.net/weixin_43992198

可變與不可變類型