class MyObj(object): def __iter__(self): self._iter = iter(self.iterator()) return iter(self._iter) def iterator(self): try: while True: yield 1 except Exception: raise i = next(iter(MyObj())) import gc gc.collect() print(gc.garbage)