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 次浏览

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告