Ref Count Checking

Robin Becker robin at jessikat.fsnet.co.uk
Sat Aug 25 17:05:03 CEST 2001


As part of an extension debugging exercise I printed refcounts
relating to the structure
('a1', {'z1': 'az1'}, ['b1', ('c1', {'y1': 'ay1'}, ['d1'], None), 'e1'], None)
either created directly in Python or by my extension.


An earlier pass revealed values of decrementing values 
for the None output from the extension (it was stealing a None).
After Correcting I'm still getting differences.
In particular the strings az1, ay1, b1, c1, d1, e1 seem to have counts from the
extension which are 3 lower than from the python version.

Is there any way to deduce what the python count should be? 
I'm assuming that a string like az1 is reasonably unique so there
shouldn't be any question of a library reference.

('a1', {'z1': 'az1'}, ['b1', ('c1', {'y1': 'ay1'}, ['d1'], None), 'e1'], None)
T6 a1:10 D7 z1:9 az1:7 L7 b1:10 T7 c1:10 D7 y1:9 ay1:7 L7 d1:10 N209 e1:10 N209
('a1', {'z1': 'az1'}, ['b1', ('c1', {'y1': 'ay1'}, ['d1'], None), 'e1'], None)
T6 a1:7 D7 z1:9 az1:4 L7 b1:7 T7 c1:7 D7 y1:9 ay1:4 L7 d1:7 N209 e1:7 N209

############################
import ext
import sys, string
from types import StringType, DictType, TupleType, ListType
def TL(ob):
        C = ob is None and 'N' or {StringType:'S', DictType:'D', ListType:'L', TupleType: 'T'}[type(ob)]
        if C =='S': C = ob + ':'
        return '%s%d' % (C, sys.getrefcount(ob))

def RC(ob,L=None):
        if L is None: L = []
        L.append(TL(ob))

        t = type(ob)
        if t in (ListType,TupleType):
                for i in ob: RC(i,L)
        elif t is DictType:
                K = ob.keys()
                K.sort()
                for k in K:
                        L.append(TL(k))
                        L.append(TL(ob[k]))
        return L

p=('a1', {'z1': 'az1'}, ['b1', ('c1', {'y1': 'ay1'}, ['d1'], None), 'e1'], None)
print p
print string.join(RC(p))
del p

p=ext.val()
print p
print string.join(RC(p))
-- 
Robin Becker



More information about the Python-list mailing list