Проверяет знание механизмов управления памятью и GC в CPython.
CPython использует подсчёт ссылок и циклический сборщик. Когда счётчик ссылок объекта падает до нуля, память освобождается. Cyclic GC по таймеру ищет группы объектов, недоступных из корневых ссылок, несмотря на циклические ссылки, и удаляет их.
Подсчёт ссылок:
Каждый объект хранит счётчик ссылок; при присваивании/increment он растёт, при удалении — уменьшается.
При нулевом счётчике объект сразу удаляется.
Cylic GC (модуль gc):
Три поколения (0, 1, 2) по частоте проверки.
При достижении порога поколения запускается сборка: ищутся unreachable‑объекты, участвующие в циклах.
Определение удаления:
Объект считаётся «мусором», если до него нет цепочки ссылок из корней (стек, глобальные имена).
Для циклов — GC детектирует группу объектов, ссылающихся друг на друга, но недостижимых извне.
Вывод:
Подсчёт ссылок — быстрый, но не решает циклы.
Cyclic GC дополняет его, очищая циклические зависимости.