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:
Daniel Fortunov 2020-06-10 21:26:49 +01:00 committed by GitHub
parent 1bcc32f062
commit 1642c0ef75
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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 application without adding attributes to those objects. This can be especially
useful with objects that override attribute accesses. 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 .. versionchanged:: 3.9
Added support for ``|`` and ``|=`` operators, specified in :pep:`584`. 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 Mapping class that references values weakly. Entries in the dictionary will be
discarded when no strong reference to the value exists any more. 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 .. versionchanged:: 3.9
Added support for ``|`` and ``|=`` operators, as specified in :pep:`584`. Added support for ``|`` and ``|=`` operators, as specified in :pep:`584`.