垃圾回收是如何在 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

更新時間: 13-Jun-2020

6K+ 瀏覽

職業起航

完成這些課程以獲得認證

開始學習
廣告