我决定我应该熟悉 library,所以我开始乱搞这些收藏,以为在这之前我已经掌握了它的诀窍。
>>> 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)这里我有一个WeakSet 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里还有一个弱裁判?我可以再次使用del,它似乎仍然存在,不管我做什么。
发布于 2016-05-25 18:38:50
您仍然可以从这里获得obj变量:
>>> for obj in objs: weak_s.add(obj)该变量保留了循环中的最后一个值,因此它仍然引用最后一个Greek实例,使其处于活动状态,并保存在WeakSet中。
https://stackoverflow.com/questions/37445080
复制相似问题