在 Python 中销毁对象(垃圾收集)
pythonserver side programmingprogramming
Python 会自动删除不需要的对象(内置类型或类实例)以释放内存空间。Python 定期回收不再使用的内存块的过程称为垃圾收集。
Python 的垃圾收集器在程序执行期间运行,并在对象的引用计数达到零时触发。对象的引用计数会随着指向它的别名数量的变化而变化。
当为对象分配新名称或将其放置在容器(列表、元组或字典)中时,对象的引用计数会增加。当使用 del 删除对象、重新分配其引用或其引用超出范围时,对象的引用计数会减少。当对象的引用计数达到零时,Python 会自动回收它。
a = 40 # 创建对象 <40> b = a # 增加 <40> 的引用计数 c = [b] # 增加 <40> 的引用计数 del a # 减少 <40> 的引用计数 b = 100 # 减少 <40> 的引用计数 c[0] = -1 # 减少 <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) # 打印对象的 id del pt1 del pt2 del pt3
输出
执行上述代码时,会产生以下结果 −
3083401324 3083401324 3083401324 Point destroy
注意 − 理想情况下,您应该在单独的文件中定义类,然后使用 import 语句将它们导入到主程序文件中。