[Python-Dev] results of id() and weakref.getweakrefs() sometimes break on object resurrection
Stefan.Richthofer at gmx.de
Tue Oct 28 01:32:53 CET 2014
>I think 'resuscitation' might be a better metaphor.
The term 'resurrection' is not my invention, but well established:
I well understand why Antoine objects to calling it "resurrection" in CPython due to
implementation specific reasons. But in the above article (which I consider rather
detailed) I can't find anything stating that an object's ref-count must drop to zero
at any time in order to call it "resurrected". In contrast, it clarifies that objects
can not only resurrect themselves:
"...which may in turn make that object or another garbage object (reachable from the
object with a finalizer) reachable again"
"If this happens, the referenced object – which is not necessarily the finalized
object – is no longer garbage, and cannot be deallocated"
> "x2" does *not* have its refcount drop to zero, since it is still
> referenced by x. In other words, "x2" can only be on a "kill list"
> after "x" has been finalized, which can only be *after* __del__ was
x resurrects x2 in the sense that it must "actively" have an action
in its finalizer that establishes a new reference to x2 in non-garbage or
environment memory. Otherwise x as the "final life support link" of x2
would cause x2's ref count *actually* drop to zero in the next step.
I never wanted this to become a discussion about the definition of object
resurrection. I just wanted to understand which details in different
behavior (such as weakref breaking) are okay and which are bugs (as
breaking consistency of id() in Jython).
> Gesendet: Montag, 27. Oktober 2014 um 23:36 Uhr
> Von: "Terry Reedy" <tjreedy at udel.edu>
> An: python-dev at python.org
> Betreff: Re: [Python-Dev] results of id() and weakref.getweakrefs() sometimes break on object resurrection
> On 10/27/2014 12:23 PM, Stefan Richthofer wrote:
> >> You mean Jython deletes instance attributes before calling __del__ ?
> > No. I think the term of "object resurrection" usually does not mean
> > bringing
> > back a deleted object in the sense that memory was already freed.
> > I think it rather means that nothing referred to an object, so it was on
> > the
> > "kill-list" of gc or zero-ref-count macro.
> In either case, there is a final reference keeping the object alive,
> like an hospital patient kept alive by a final link with a life-support
> machine. I think 'resuscitation' might be a better metaphor.
> Terry Jan Reedy
> Python-Dev mailing list
> Python-Dev at python.org
> Unsubscribe: https://mail.python.org/mailman/options/python-dev/stefan.richthofer%40gmx.de
More information about the Python-Dev