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

更新於: 2020-06-13

6K+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.