(一)python的可變與不可變資料型別
阿新 • • 發佈:2019-01-23
- >>> x = 1
- >>> id(x)
- 31106520
- >>> y = 1
- >>> id(y)
- 31106520
- >>> x = 2
- >>> id(x)
- 31106508
- >>> y = 2
- >>> id(y)
- 31106508
- >>> z = y
- >>> id(z)
- 31106508
- >>> x += 2
- >>> id(x)
- 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這個物件。