Peter Otten <[EMAIL PROTECTED]> wrote:
> Peter Otten wrote: > >>> Both Python 2.4 and 2.5 don't clean up properly here. Why is this? >>> Aren't classes supposed to be garbage-collected? >> >> The reference keeping the classes alive is probably >> object.__subclasses__(): >> >>>>> class A(object): pass >> ... >>>>> sum(1 for c in object.__subclasses__() if c.__name__ == "A") >> 1 >>>>> class A(object): pass >> ... >>>>> sum(1 for c in object.__subclasses__() if c.__name__ == "A") >> 2 > > Oops, wrong guess: > >>>> import gc >>>> gc.collect() > 6 >>>> sum(1 for c in object.__subclasses__() if c.__name__ == "A") > 1 > The list of subclasses is stored using weak references: that's why you have to call a method to create a real list. What actually stops the class just vapourising is its __mro__ attribute which creates a cycle, but the garbage collector clears that up as you saw. -- http://mail.python.org/mailman/listinfo/python-list