import gc
from itertools import groupby
from genshi.template.base import Context
from genshi.template.eval import Expression

expr1 = Expression("iter(groupby(test, key=lambda x: len(x)))")

def run(**data):
    ctxt = Context(**data)
    for i, j in expr1.evaluate(ctxt):
        ctxt['j'] = j
        raise ValueError("bad")

i = 10
while i:
    gc.collect()
    num_objects = len(gc.get_objects())
    try:
        run(test=dict.fromkeys(map(str, range(10, 100))), groupby=groupby)
    except Exception, e:
        print e
    i -= 1 # 2 passes needed for reaching fix-point

    # check the memory usage again
    gc.collect()
    print num_objects, len(gc.get_objects())
