WeakValueDictionary retaining reference to object with no more strong references
问题 >>> 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>} Why does it show this instead of an empty dictionary? Note that this code produces the result I'd expect: >>> db2 = WeakValueDictionary() >>> db2['disposable-id'] = Foo() >>> dict(db2) {} It also behaves as expected when executing a script (instead of the interactive interpreter