垃圾回收是如何在 Python 中起作用的?
Python 自動刪除不需要的物件(內建型別或類例項)以釋放記憶體空間。Python 定期釋放和回收不再使用的記憶體塊的過程稱為垃圾回收。
Python 的垃圾回收器在程式執行期間執行,並在物件的引用計數變為零時觸發。物件的引用計數隨指向該物件的別名數量的變化而變化。
當物件被賦予一個新名稱或被放入容器(列表、元組或字典)中時,其引用計數會增加。當物件被 del 刪除,其引用被重新分配或其引用超出範圍時,物件的引用計數會減少。當物件的引用計數變為零時,Python 會自動收集它。
a = 40 # Create object <40> b = a # Increase ref. count of <40> c = [b] # Increase ref. count of <40> del a # Decrease ref. count of <40> b = 100 # Decrease ref. count of <40> c[0] = -1 # Decrease ref. count of <40>
通常情況下,你不會注意到垃圾回收器銷燬孤立例項並回收其空間的時間。但是,一個類可以實現特殊方法 __del__(),稱為解構函式,該方法在例項即將被銷燬時呼叫。此方法可用於清理例項使用的任何非記憶體資源。
示例
此 __del__() 解構函式輸出即將被銷燬的例項的類名 −
#!/usr/bin/python class Point: def __init__( self, x=0, y=0): self.x = x self.y = y def __del__(self): class_name = self.__class__.__name__ print class_name, "destroyed" pt1 = Point() pt2 = pt1 pt3 = pt1 print id(pt1), id(pt2), id(pt3) # prints the ids of the obejcts del pt1 del pt2 del pt3
輸出
當上述程式碼執行時,會產生以下結果 −
3083401324 3083401324 3083401324 Point destroyed
廣告