垃圾回收
垃圾回收,指的是不再被使用的对象会被 Python 自动标记为垃圾。
引用计数
当我们建立一个 object 后,Python 会在后面自动进行 object 的引用计数,引用计数表示有多少个变量指向这个 object。
当引用计数变为 0 之后,说明 object 不再被使用,Python 会自动回收这个 object 对应的内存。
垃圾回收
循环引用
循环引用会使引用计数导致的自动回收失效,例如下面的代码:
class ListNode:
def __init__(self, val):
self.val = val
val: int
nxt: ListNode
a = ListNode(1)
b = ListNode(2)
a.nxt = b
b.nxt = a
del a
del b
这段代码的 a 和 b 相互引用了对方,引用计数为 2,例如第一个节点就有 a 和 b.nxt 两个变量引用着对象。进行 del a 和 del b 后只是让各自的计数 -1,并没有让其减到 0,自动回收机制失效了。
垃圾回收机制
gc.collect 可以自动消除循环引用。
BEYOND THE ARTICLE
读完了,有什么想法?
阅读已保存的问答示例,并循着引用回到原文。
— 本文完 — 返回文章列表