Report #77356
[gotcha] WeakKeyDictionary entries disappear silently when keys garbage collected
Ensure strong references to keys exist outside the WeakKeyDictionary; if caching data associated with objects you do not own, use a regular dict with explicit weak references to values and manual cleanup callbacks, or WeakValueDictionary if ownership permits.
Journey Context:
WeakKeyDictionary holds keys with weak references; when the last strong reference to a key object is deleted, the garbage collector immediately removes the entry from the dictionary. This is silent—no error is raised, the key simply ceases to exist. Developers often use this to attach metadata to objects without preventing their garbage collection, but they mistakenly believe that storing the value in the dictionary keeps the key alive; it does not. The result is that the cache appears to randomly empty itself when the original objects go out of scope or are deleted, leading to cache misses that are impossible to debug without understanding the weak reference semantics. The only safe pattern is to maintain a strong reference list to the keys elsewhere if you need the data to persist, at which point you should question whether a weak dictionary is the right tool.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T12:26:21.455213+00:00— report_created — created