Python 中的垃圾回收机制是如何工作的

2023-04-04 00:00:00 机制 回收 垃圾

在 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 模块来手动启动循环垃圾回收机制。

相关文章