0
以下のコードをREPLで実行すると、手動で行った後でもこの問題が表示されます。gc.collect()
weakrefオブジェクトが引き続き表示されます。強い参照が削除されたとマニュアルGCが行われているが、なぜ私はまだこれを見ていたら、理想的にはweakrefをクリアしなければならない手作業によるGCC収集後でもウィークリファレンスがREPLで削除されない
[67]: from weakref import WeakValueDictionary
class A:
def __init__(self):
self.val = 1
a = A()
w = WeakValueDictionary()
w['k1'] = a
dict(w)
Out[72]: {'k1': <__main__.A at 0x1e59e9b84a8>}
del a
gc.collect()
Out[74]: 239
dict(w)
Out[75]: {'k1': <__main__.A at 0x1e59e9b84a8>}
の下を参照してください。