1. 程式人生 > >(一)python的可變與不可變資料型別

(一)python的可變與不可變資料型別

  1. >>> x = 1
  2. >>> id(x)  
  3. 31106520
  4. >>> y = 1
  5. >>> id(y)  
  6. 31106520
  7. >>> x = 2
  8. >>> id(x)  
  9. 31106508
  10. >>> y = 2
  11. >>> id(y)  
  12. 31106508
  13. >>> z = y  
  14. >>> id(z)  
  15. 31106508
  1. >>> x += 2
  2. >>> id(x)  
  3. 31106484

    上面這段程式都是對不可變資料型別中的int型別的操作,id()檢視的是當前變數的地址值。我們先來看x = 1和y = 1兩個操作的結果,從上面的輸出可以看到x和y在此時的地址值是一樣的,也就是說x和y其實是引用了同一個物件,即1,也就是說記憶體中對於1只佔用了一個地址,而不管有多少個引用指向了它,都只有一個地址值,只是有一個引用計數會記錄指向這個地址的引用到底有幾個而已。當我們進行x = 2賦值時,發現x的地址值變了,雖然還是x這個引用,但是其地址值卻變化了,後面的y = 2以及z = y,使得x、y和z都引用了同一個物件,即2,所以地址值都是一樣的。當x和y都被賦值2後,1這個物件已經沒有引用指向它了,所以1這個物件佔用的記憶體,即31106520地址要被“垃圾回收”,即1這個物件在記憶體中已經不存在了。最後,x進行了加2的操作,所以建立了新的物件4,x引用了這個新的物件,而不再引用2這個物件。