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.
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:33 | admin | set | github: 59617 |
| 2012年08月17日 14:08:30 | sbt | set | status: open -> closed resolution: fixed stage: resolved |
| 2012年08月17日 14:06:49 | python-dev | set | nosy:
+ python-dev messages: + msg168446 |
| 2012年07月21日 10:59:29 | pitrou | set | messages: + msg166010 |
| 2012年07月21日 10:58:21 | sbt | set | messages: + msg166009 |
| 2012年07月21日 10:23:52 | pitrou | set | messages: + msg166006 |
| 2012年07月21日 09:41:57 | sbt | create | |