bpo-40895: Update weakref documentation to remove old warnings (GH-20687)
The doccumentation at https://docs.python.org/3.10/library/weakref.html cautions that the `WeakKeyDictionary` and `WeakValueDictionary` are susceptible to the problem of dictionary mutation during iteration.
These notes present the user with a problem that has no easy solution.
I dug into the implementation and found that fortunately, Antoine Pitrou already addressed this challenge (10 years ago!) by introducing an `_IterationGuard` context manager to the implementation, which delays mutation while an iteration is in progress.
I asked for confirmation and @pitrou agreed that these notes could be removed:
c1baa601e2 (commitcomment-39514438)
This commit is contained in:
parent
1bcc32f062
commit
1642c0ef75
|
@ -163,14 +163,6 @@ Extension types can easily be made to support weak references; see
|
|||
application without adding attributes to those objects. This can be especially
|
||||
useful with objects that override attribute accesses.
|
||||
|
||||
.. note::
|
||||
|
||||
Caution: Because a :class:`WeakKeyDictionary` is built on top of a Python
|
||||
dictionary, it must not change size when iterating over it. This can be
|
||||
difficult to ensure for a :class:`WeakKeyDictionary` because actions
|
||||
performed by the program during iteration may cause items in the
|
||||
dictionary to vanish "by magic" (as a side effect of garbage collection).
|
||||
|
||||
.. versionchanged:: 3.9
|
||||
Added support for ``|`` and ``|=`` operators, specified in :pep:`584`.
|
||||
|
||||
|
@ -192,14 +184,6 @@ than needed.
|
|||
Mapping class that references values weakly. Entries in the dictionary will be
|
||||
discarded when no strong reference to the value exists any more.
|
||||
|
||||
.. note::
|
||||
|
||||
Caution: Because a :class:`WeakValueDictionary` is built on top of a Python
|
||||
dictionary, it must not change size when iterating over it. This can be
|
||||
difficult to ensure for a :class:`WeakValueDictionary` because actions performed
|
||||
by the program during iteration may cause items in the dictionary to vanish "by
|
||||
magic" (as a side effect of garbage collection).
|
||||
|
||||
.. versionchanged:: 3.9
|
||||
Added support for ``|`` and ``|=`` operators, as specified in :pep:`584`.
|
||||
|
||||
|
|
Loading…
Reference in New Issue