小编mob*_*ben的帖子

为什么命名元组总是由python的GC跟踪?

正如我们(或至少我)在这个答案中所学到的那样,只有包含不可变值的简单元组才会被python的垃圾收集器跟踪,一旦它发现它们永远不会参与引用循环:

>>> import gc
>>> x = (1, 2)
>>> gc.is_tracked(x)
True
>>> gc.collect()
0
>>> gc.is_tracked(x)
False
Run Code Online (Sandbox Code Playgroud)

为什么这不是namedtuple的情况,它是来自具有命名字段的collections模块的元组的子类?

>>> import gc
>>> from collections import namedtuple
>>> foo = namedtuple('foo', ['x', 'y'])
>>> x = foo(1, 2)
>>> gc.is_tracked(x)
True
>>> gc.collect()
0
>>> gc.is_tracked(x)
True
Run Code Online (Sandbox Code Playgroud)

他们的实现中是否存在一些可以防止这种情况或者只是被忽视的东西?

python garbage-collection

4
推荐指数
1
解决办法
1216
查看次数

标签 统计

garbage-collection ×1

python ×1