Python中的垃圾回收是如何工作的?
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__()
,当实例即将被销毁时调用该方法(称为析构函数)。此方法可以用于清理实例使用的任何非内存资源。
更多Python相关文章,请阅读:Python 教程
示例
这是一个__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 destroyed