>>> from weakref import WeakValueDictionary
>>> class Foo(object):
... pass
>>> foo = Foo()
>>> db = WeakValueDictionary()
>>> db['foo-id'] = foo
>>> del foo
>>> dict(db)
{'foo-id': <__main__.Foo object at 0x4dd946c>}
空の辞書の代わりにこれが表示されるのはなぜですか?このコードは私が期待する結果を生成することに注意してください:
>>> db2 = WeakValueDictionary()
>>> db2['disposable-id'] = Foo()
>>> dict(db2)
{}
また、(対話型インタープリターの代わりに)スクリプトを実行するときに期待どおりに動作します。
from weakref import WeakValueDictionary
class Foo(object):
pass
foo = Foo()
db = WeakValueDictionary()
db['foo-id'] = foo
del foo
print str(dict(foo))
# prints {}