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
