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.

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