import ast import tracemalloc source = """ def func(): trace = [] def use_nonlocal(): nonlocal trace # 10 trace.append(None) trace.append(None) trace.append(None) trace.append(None) trace.append(None) trace.append(None) trace.append(None) trace.append(None) trace.append(None) trace.append(None) # 10 trace.append(None) trace.append(None) trace.append(None) trace.append(None) trace.append(None) trace.append(None) trace.append(None) trace.append(None) trace.append(None) trace.append(None) """ tracemalloc.start(25) snapshot1 = tracemalloc.take_snapshot() # leak 6.7 kB obj = compile(source, "filename", "exec", ast.PyCF_ONLY_AST) obj = None # leak 2.4 kB obj = compile(source, "filename", "exec", ast.PyCF_ONLY_AST) obj = None # leak 2.4 kB obj = compile(source, "filename", "exec", ast.PyCF_ONLY_AST) snapshot2 = tracemalloc.take_snapshot() snapshot1 = snapshot1.filter_traces(( tracemalloc.Filter(False, ""), tracemalloc.Filter(False, ""), tracemalloc.Filter(False, tracemalloc.__file__), )) snapshot2 = snapshot2.filter_traces(( tracemalloc.Filter(False, ""), tracemalloc.Filter(False, ""), tracemalloc.Filter(False, tracemalloc.__file__), )) top_stats = snapshot2.compare_to(snapshot1, 'lineno') print("[ Top 10 differences ]") for stat in top_stats[:10]: print(stat)