可變類型與不可變類型的做用和意義

Python中的變量分爲可變類型和不可變類型 兩種。python

  可變類型: 數字、字符串、元組、可變集合。函數

  不可變類型: 列表、字典、不可變集合。spa

  這裏的可變不可變,是指內存中的那塊內容(value)是否能夠被改變3d

   所謂可變類型與不可變類型是指:數據可以直接進行修改,若是能直接修改那麼就是可變,不然是不可變。指針

 

    根據存儲的內容是否可變劃分爲可變類型與不可變類型。若是是不可變類型,在對對象自己操做的時候,必須在內存中新申請對象

  一塊區域(由於老區域是不可變)。若是是可變類型,對對象操做的時候,不須要再在其餘地方申請內存,只須要在此對象後面連blog

  續申請(+/-)便可,也就是它的address空間地址會保持不變,但區域會變長或者變短。內存

    經過id(變量名)  來查看變量的空間地址是否發生變化。字符串

 

     python中所聲明的變量都以對象的形式存在,存在於機器的固定內存之中。能夠理解爲變量名爲對象的指針。變量

   在python中設置的垃圾回收機制採用的是引用計數機制來實現,就是經過使用計數器的方式來判斷空間的引用狀況,當計

   數器爲0時則會將內存回收。例如聲明變量a=3,則說明a指向存儲3的空間,那麼此時存儲3的空間引用計數加1。若是此時

   定義a=4,那麼變量a的指向則指向內存中存儲4的空間地址,存儲4的空間引用計數加1,而以前存儲3的空間引用減1爲0,

   則會被做爲垃圾回收掉。

不可變類型

  不可變類型有什麼好處?若是數據是不可變類型,當咱們把數據傳給一個不瞭解的API時,能夠確保咱們的數據不會被修改。若是咱們要操做一個從函數返回的元組,能夠經過內建函數list()把它轉換成一個列表。

  python在聲明不可變類型時會在已經聲明的對象中尋找該對象是否已經被聲明過,若該對象被聲明過則,變量會直接指向該對象不會再申請新的內存空間。

如a=3已經聲明這時聲明b=3,則a,b指向同一塊內存

  不可變類型不能對其內容直接修改,如字符串'hellopython'能夠對其進行分割加長的處理(通過如此處理以後python實際上是將新的字符串儲存到新的內存中),可是不能替換改變其字符串中某個字母的內容。

 

(一) 數字、字符串

  例如:對於不可變類型  數字1,它在內存中的地址是惟一的。因此a=1, b=1都是指向存儲1的內存地址。

    若是a=2,那麼變量a的指向則發生了變化,指向了存儲2的空間地址。

   舉例:這裏是最好區分可變與不可變類型的數據了。  如 如今是不可變類型 數字a=1,在修改a+1後獲得的b,此時就會建立一個新的內存地址用來保存修改後的對象,因此內存地址不同。而對於可變類型數據在這一點就不同。 

 

不可變類型:字符串

 

 不可變類型: 元組

 

可變類型

可變類型:列表

可變類型:字典

相關文章
相關標籤/搜索