A decorator for detecting memory leaks in python

I thought I had a memory leak in a program I was writing for my wife
today and found this awesome answer on StackOverflow. I turned it
into a decorator to I could detect memory leaks more easily in the
future. The code for the decorator is below. #!python
def report_memory_leaked(f):
“”” Counts objects allocated in memory before and after the
decorated function and reports the results. If you decorate
a function like
@report_memory_leaked
def myfunc():
pass # do stuff

It will report objects by type that were leaked or created.
“””
from collections import defaultdict
from gc import get_objects
import logging def obj_counting_wrapper(*args, **kwargs):

before=defaultdict(int)
for i in get_objects():before[type(i)]+=1 retval = f(*args, **kwargs)

after=defaultdict(int)
for i in get_objects():after[type(i)]+=1 leaked_or_returned = [(k,after[k]-before[k]) for k in
after if after[k]-before[k]]
if leaked_or_returned:
logging.debug(‘Leaked or returned:\n%r’ %
leaked_or_returned)

return retval
return obj_counting_wrapper