正如我们(或至少我)在这个答案中所学到的那样,只有包含不可变值的简单元组才会被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)
他们的实现中是否存在一些可以防止这种情况或者只是被忽视的东西?