计算机

垃圾回收

垃圾回收,指的是不再被使用的对象会被 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

读完了,有什么想法?

阅读已保存的问答示例,并循着引用回到原文。

查看公开问答示例
— 本文完 — 返回文章列表