1. 程式人生 > >python的引用計數和垃圾回收

python的引用計數和垃圾回收

python引用計數和垃圾回收

引用計數

所有物件都有引用計數。給一個物件分配一個新名稱,或是將其放入一個容器,都會增加該物件的引用計數

a = 37
b = a
c = []
c.append(b)

這是一個包含值37的物件,a只是引用這個新建立的物件的一個名稱。

使用del語句或者引用超出作用於(或者被重新賦值時),物件的引用計數就會減少

使用sys.getrefcount()可以獲得物件的當前引用計數

多數情況下,引用計數比你猜測的要大很多。對於不可變的資料(如數字和字串),直譯器會主動在程式不同部分共享物件,以便節約記憶體

垃圾回收

當一個物件的引用計數歸零時,他將被垃圾回收機制處理掉。但在某些情況下,在很多已不再使用物件間可能存在迴圈以來關係。

直譯器會定期執行一個週期檢測器,搜尋不可訪問的物件週期並刪除他們。直譯器在執行過程中會被分配越來越多的記憶體,再次過程中,會定期執行週期檢測演算法。使用gc模組中的函式可以準確調整和控制該演算法的行為