import gc gc.set_debug(gc.DEBUG_UNCOLLECTABLE|gc.DEBUG_COLLECTABLE|gc.DEBUG_OBJECTS) class Cycle: def __init__(self): self.c = self class Immortal: resurrected = [] def __del__(self): self.resurrected.append(self) class Finalizer: def __del__(self): pass cycle = Cycle() cycle.x = Immortal() cycle.x.y = Finalizer() print (gc.collect(), gc.garbage) assert gc.garbage == [] # Nothing special so far del cycle print (gc.collect(), gc.garbage) # 'Finalizer' instance appears in garbage. # Not real garbage though: del gc.garbage[0] gc.collect() assert gc.garbage == []