Циклический GC дополняет подсчёт ссылок и находит недостижимые циклы объектов. gc.garbage содержит не все удалённые объекты, а прежде всего найденные, но не освобождённые, либо сохранённые debug-режимом.
Как устроен сборщик мусора для циклических ссылок (генерационный GC) и что такое gc.garbage?
Циклический GC дополняет подсчёт ссылок и находит недостижимые циклы объектов. gc.garbage содержит не все удалённые объекты, а прежде всего найденные, но не освобождённые, либо сохранённые debug-режимом.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Циклический GC дополняет подсчёт ссылок и находит недостижимые циклы объектов. gc.garbage содержит не все удалённые объекты, а прежде всего найденные, но не освобождённые, либо сохранённые debug-режимом.
Поколенческий подход позволяет проверять молодые объекты чаще, а пережившие сборки — реже; точные поколения и пороги зависят от версии и сборки CPython. Контейнеры участвуют в обходе ссылок, а простые атомарные объекты часто не отслеживаются. В современных Python наличие __del__ само по себе обычно не делает цикл несобираемым. При DEBUG_SAVEALL недостижимые объекты специально сохраняются в gc.garbage вместо освобождения. Глобальная ссылка означает достижимость, а не неисправность GC.
Источник: docs.python.org.