我决定我应该熟悉^{
>>> import weakref
>>> class Greek():
def __init__(self, name):
self.name = name
>>> objs = [Greek('alpha'), Greek('gamma'), Greek('zeta')]
>>> weak_s = weakref.WeakSet()
>>> for obj in objs: weak_s.add(obj)
这里我有一个弱集weak_s
,我希望每个Greek()
实例包含3个weakref
,它确实:
>>> weak_s.data
{<weakref at 0x02ECA690; to 'Greek' at 0x02E5FF90>,
<weakref at 0x02ECA720; to 'Greek' at 0x02E5FFB0>,
<weakref at 0x02ECA750; to 'Greek' at 0x02E5FFD0>}
然后我希望,一旦我去掉了objs
名称,就不会再有对每个Greek()
实例的“强引用”,它们将被垃圾收集。但出于某种原因,这并没有发生。你知道吗
>>> del objs
>>> weak_s.data
{<weakref at 0x02ECA750; to 'Greek' at 0x02E5FFD0>}
为什么我的WeakSet里还有一个weakref?我可以再次使用del
,而且它仍然存在,似乎不管我做什么。你知道吗
这里还有
obj
变量:该变量保留了它在循环中的最后一个值,因此它仍然引用最后一个
Greek
实例,使它保持活动状态并在WeakSet
中。你知道吗相关问题 更多 >
编程相关推荐