私はweakref
libraryに慣れるべきだと決めたので、私はコレクションを使いこなし始めました。他の唯一のリファレンスを削除した後にWeakSetが空でないのはなぜですか?
>>> 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)
ここで私は、私は、各Greek()
インスタンスに3 weakref
秒を含めることを期待することWeakSet weak_s
を持っており、それがない:
>>> 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
をもう一度使うことができます。そして、それは一見私が何をしても持続します。
「Foo」はどこから来たのですか? – user2357112
@ user2357112申し訳ありません、編集済みです。 (途中でFooに変わってしまった)。 –
実際の通訳セッションからコードと結果をコピーして貼り付けてください。質問ボックスに出力を再入力したり、手動で修正して見つかったエラーを修正したりしないでください。コードの実際の動作を隠すだけです。 – user2357112