import gc import sys import weakref class A: pass class B: pass gc.disable() gc.collect() gc.set_debug(gc.DEBUG_STATS | gc.DEBUG_LEAK) a = A() weakref.finalize(a, print, 'finalize: a', file=sys.stderr).atexit = False b = B() b.a = a b.b = b weakref.finalize(b, print, 'finalize: b', a, file=sys.stderr).atexit = False del a del b for _ in range(10): gc.collect() gc.set_debug(0)