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

职业起航

完成这些课程以获得认证

开始学习
广告