homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Note in documentation for weakrefs
Type: Stage: resolved
Components: Documentation Versions:
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: docs@python Nosy List: docs@python, pitrou, python-dev, sbt
Priority: normal Keywords:

Created on 2012年07月21日 09:41 by sbt, last changed 2022年04月11日 14:57 by admin. This issue is now closed.

Messages (5)
msg166002 - (view) Author: Richard Oudkerk (sbt) * (Python committer) Date: 2012年07月21日 09:41
In the documentation on weakrefs there is the following quote
 Note: Weak references to an object are cleared before the object’s
 __del__() is called, to ensure that the weak reference callback 
 (if any) finds the object still alive.
But I think the weakref is always dead by the time the callback is invoked. The first paragraph from the documentation for weakref.ref(object[, callback]) contains the following:
 If callback is provided and not None, and the returned weakref 
 object is still alive, the callback will be called when the object 
 is about to be finalized; the weak reference object will be passed 
 as the only parameter to the callback; **the referent will no longer 
 be available**.
Which does prompt a question: what use is there for the weakref argument to the callback if it already dead?
(Compare http://bugs.python.org/issue14933)
msg166006 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2012年07月21日 10:23
> In the documentation on weakrefs there is the following quote
> 
> Note: Weak references to an object are cleared before the object’s
> __del__() is called, to ensure that the weak reference callback 
> (if any) finds the object still alive.
> 
> But I think the weakref is always dead by the time the callback is
> invoked.
It's true, the doc needs fixing.
> Which does prompt a question: what use is there for the weakref
> argument to the callback if it already dead?
The weakref is "dead" but it's still a weakref, and it can be used to
e.g. index a container of existing weakrefs (cf. WeakSet,
WeakKeyDictionary, WeakValueDictionary).
msg166009 - (view) Author: Richard Oudkerk (sbt) * (Python committer) Date: 2012年07月21日 10:58
> The weakref is "dead" but it's still a weakref, and it can be used to
> e.g. index a container of existing weakrefs (cf. WeakSet,
> WeakKeyDictionary, WeakValueDictionary).
Ah.
I had assumed that since dead weakrefs were unhashable you couldn't safely use them as keys in a dict. (Presumably removal of a no longer hashable key from a dict is O(n)?)
I also hadn't realize that weakrefs were subclassable.
msg166010 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2012年07月21日 10:59
> I had assumed that since dead weakrefs were unhashable you couldn't
> safely use them as keys in a dict. (Presumably removal of a no longer
> hashable key from a dict is O(n)?)
They are unhashable if you didn't hash them alive. Otherwise they retain
their old hash value (which is quite useful :-)).
msg168446 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2012年08月17日 14:06
New changeset 78b0f294674c by Richard Oudkerk in branch '2.7':
Issue #15412: Remove erroneous note about weakrefs
http://hg.python.org/cpython/rev/78b0f294674c
New changeset 24b13be81d61 by Richard Oudkerk in branch '3.2':
Issue #15412: Remove erroneous note about weakrefs
http://hg.python.org/cpython/rev/24b13be81d61 
History
Date User Action Args
2022年04月11日 14:57:33adminsetgithub: 59617
2012年08月17日 14:08:30sbtsetstatus: open -> closed
resolution: fixed
stage: resolved
2012年08月17日 14:06:49python-devsetnosy: + python-dev
messages: + msg168446
2012年07月21日 10:59:29pitrousetmessages: + msg166010
2012年07月21日 10:58:21sbtsetmessages: + msg166009
2012年07月21日 10:23:52pitrousetmessages: + msg166006
2012年07月21日 09:41:57sbtcreate

AltStyle によって変換されたページ (->オリジナル) /