Python 中的垃圾回收机制是如何工作的
在 Python 中,垃圾回收机制主要是通过引用计数来实现的。每个对象都有一个计数器,记录着有多少个变量指向该对象。当计数器变为 0 时,说明该对象已经没有被引用了,可以被垃圾回收机制清理掉。
除了引用计数,Python 还有一种垃圾回收机制叫做循环垃圾回收机制(Cycle-Detecting Garbage Collector)。循环垃圾回收机制可以检测出存在循环引用的对象,并将它们清理掉。
下面是一个使用字符串作为范例的代码演示:
import sys a = "pidancode.com" b = "皮蛋编程" c = [a, b] d = [c, c] print(sys.getrefcount(a)) # 2 print(sys.getrefcount(b)) # 2 print(sys.getrefcount(c)) # 3 print(sys.getrefcount(d)) # 2 c = None d = None print(sys.getrefcount(a)) # 1 print(sys.getrefcount(b)) # 1
在上面的代码中,我们定义了两个字符串对象 a 和 b,然后将它们存放到一个列表 c 中,再将 c 存放到一个列表 d 中。此时,a 和 b 的引用计数为 2,c 的引用计数为 3,d 的引用计数为 2。
接着,我们将 c 和 d 分别赋值为 None,即将它们的引用计数减 1。此时,a 和 b 的引用计数变为 1,说明它们已经可以被垃圾回收机制清理掉了。
需要注意的是,引用计数机制只是 Python 垃圾回收机制中的一部分,循环垃圾回收机制在检测到存在循环引用时会启动,并清理掉这些对象。如果你使用的是 CPython,可以通过 gc 模块来手动启动循环垃圾回收机制。
相关文章