Python GC中跟踪的任何对象都没有引用者吗?

2024-05-21 01:14:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我计划验证我的python3.6代码是否有任何循环引用

给定一个对象,get\u referershttps://docs.python.org/3/library/gc.html#gc.get_referrers返回引用该对象的所有对象。但是,以下返回[]

[o for o in gc.get_objects() if not bool(gc.get_referrers(o))]

这意味着所有对象至少有一个引用

我还发现了使用模块作为根的https://mg.pov.lt/objgraph/objgraph.html#objgraph.is_proper_module

[o for o in gc.get_objects() if objgraph.is_proper_module(o)]

尽管模块之间仍然可以相互引用。。。这是寻根的正确方法吗


Tags: 模块对象inobjgraphforgetifobjects
1条回答
网友
1楼 · 发布于 2024-05-21 01:14:29

在GC不知道引用的情况下跟踪GC对象是非常容易的。例如

>>> gc.get_referrers([1, 2, 3])
[]

未返回任何引用者。GC不知道frame对象的值堆栈上的引用(除了挂起的生成器和协程的帧),这就是对[1, 2, 3]列表的引用的来源

其他情况包括对象,这些对象的引用只存在于C全局或局部变量中

相关问题 更多 >