Why this ref leak?
Peter Otten
__peter__ at web.de
Wed Feb 27 07:51:21 EST 2008
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
More information about the Python-list
mailing list