On 9/26/06, Tim Peters <[EMAIL PROTECTED]> wrote:
> [Giovanni Bajo]
> > You say that __del__ is harardous, but I can't see how
> > weakrefs are less hazardous. As an implicit finalization method, they live 
> > on
> > the fragile assumption that the callback won't hold a reference to the 
> > object:

> Nope, not so.

I think you read "live" as "not trash", but in this particular
sentence, he meant it as "be useful".

> Read Modules/gc_weakref.txt for the gory details.  In
> outline, there are three objects of interest here:  the weakly
> referenced object (WO), the weakref (WR) to the WO, and the callback
> (CB) callable attached to the WR.

> /Normally/ the CB is reachable (== not trash).

(Otherwise it can't act as a finalizer, because it isn't around)

> If a reachable CB has
> a strong reference to the WO, then that keeps the WO reachable too,

So it doesn't act as a finalizer; it acts as an immortalizer.  All the
pain of __del__, and it takes only one to make a loop.  (Bound methods
are in this category.)

> OTOH, if the CB has a weak reference to the WO, then when the WO goes
> away and the CB is invoked, the CB's weak reference returns None
> instead of the WO.

So it still can't act as a proper finalizer, if only because it isn't
fast enough.

-jJ
_______________________________________________
Python-3000 mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe: 
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com

Reply via email to