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

注意 - 理想情況下,您應該在單獨的檔案中定義您的類,然後使用 import 語句在您的主程式檔案中匯入它們。

更新於: 2020-01-30

837 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告