这段Python代码哪里存在循环引用啊?

发布于 2022-09-01 06:01:35 字数 948 浏览 27 评论 0

下面的代码,gc提示说有四个无法回收(uncollectable)的对象,应该是有循环引用存在,哪里存在循环引用啊,请高人指点。这里是作者的原文 Python中带有显式del方法的对象需要手动释放循环引用

[file.py]
class Foo(object):
    def __init__(self):
        self._bar = {"test": self.test}
        print "construct"

    def test(self):
        print "test"

    def __del__(self):
        print "del"

import gc
gc.set_debug(gc.DEBUG_STATS | gc.DEBUG_LEAK)
f = Foo()
del f
gc.collect()

执行上面代码,结果如下
>>> 
construct
gc: collecting generation 2...
gc: objects in each generation: 620 1106 8289
gc: uncollectable <Foo 02699770>
gc: uncollectable <dict 02693660>
gc: uncollectable <dict 02693540>
gc: uncollectable <instancemethod 02669198>
gc: done, 4 unreachable, 4 uncollectable, 0.0260s elapsed.
>>> 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤者何惧 2022-09-08 06:01:35

一个 dict {"test": self.test } 持有 f,同时 f 也持有这个 dict,就是循环引用了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文