Как устроен сборщик мусора для циклических ссылок (генерационный GC) и что такое gc.garbage?

Циклический GC дополняет подсчёт ссылок и находит недостижимые циклы объектов. gc.garbage содержит не все удалённые объекты, а прежде всего найденные, но не освобождённые, либо сохранённые debug-режимом.

Короткий ответ

Что ответить на собеседовании

Циклический GC дополняет подсчёт ссылок и находит недостижимые циклы объектов. gc.garbage содержит не все удалённые объекты, а прежде всего найденные, но не освобождённые, либо сохранённые debug-режимом.

Подробный разбор

Ответ с пояснениями

Циклический GC дополняет подсчёт ссылок и находит недостижимые циклы объектов. gc.garbage содержит не все удалённые объекты, а прежде всего найденные, но не освобождённые, либо сохранённые debug-режимом.

Поколенческий подход позволяет проверять молодые объекты чаще, а пережившие сборки — реже; точные поколения и пороги зависят от версии и сборки CPython. Контейнеры участвуют в обходе ссылок, а простые атомарные объекты часто не отслеживаются. В современных Python наличие __del__ само по себе обычно не делает цикл несобираемым. При DEBUG_SAVEALL недостижимые объекты специально сохраняются в gc.garbage вместо освобождения. Глобальная ссылка означает достижимость, а не неисправность GC.

Источник: docs.python.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее