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
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP