Check
Как работает сборщик мусора в CPython помимо подсчёта ссылок? Что происходит с циклическими ссылками и какие типы объектов GC не умеет корректно собирать?

GC и циклические ссылки

Ответ 1 / 1

CPython использует подсчёт ссылок + дополнительный поколенческий GC для обнаружения циклов. Когда счётчик ссылок объекта не ноль, но объект больше недостижим (циклы), это обнаруживает GC, обходя граф объектов. Проблема — если в цикле есть объекты с `__del__`, GC не знает, в каком порядке их вызывать, и может пометить их как неосвобождаемые (попадают в `gc.garbage`). Поэтому для сложных графов лучше избегать `__del__` и использовать явные контекстные менеджеры или слабые ссылки (`weakref`).