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) # 打印对象的 id

del pt1

del pt2

del pt3

输出结果

执行上述代码时,会产生以下结果 -

3083401324 3083401324 3083401324

Point destroyed

以上是 Python 中的垃圾收集是如何工作的? 的全部内容, 来源链接: utcz.com/z/345846.html

回到顶部