objectif
Laisser le GC libérer les objets non référencés automatiquement.
code minimal
import weakref, gc
class Obj: pass
cache: "weakref.WeakValueDictionary[int, Obj]" = weakref.WeakValueDictionary()
o = Obj(); cache[1] = o
del o; gc.collect()
print(1 not in cache or cache[1]) # attendu: True (clé purgée)
utilisation
import weakref
class C: pass
w = weakref.WeakValueDictionary()
c = C(); w["k"] = c
print(w["k"] is c)
variante(s) utile(s)
import weakref, gc
class C: pass
w = weakref.WeakValueDictionary(); c = C(); w["x"] = c; del c; gc.collect()
print("x" not in w)
notes
- Le cache ne garde pas en vie les objets; évite les fuites.
- Les clés doivent être fortes (ex: int, str); les valeurs sont faibles.