Gerhard Häring wrote:

> import sys
> 
> def foo():
>      class C(object):
>          pass
> 
> foo()
> print ">>", sys.gettotalrefcount()
> foo()
> print ">>", sys.gettotalrefcount()
> foo()
> print ">>", sys.gettotalrefcount()
> 
>  >> 21366
>  >> 21387
>  >> 21408
> [9779 refs]
> 
> 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

Peter
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to