mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
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
GH-commitcomment-39514438 (cherry picked from commit1642c0ef75
) Co-authored-by: Daniel Fortunov <asqui@users.noreply.github.com>
This commit is contained in:
parent
af69325753
commit
18e07ba931
1 changed files with 0 additions and 16 deletions
|
@ -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…
Add table
Add a link
Reference in a new issue