Что такое Frame Objects (types.FrameType)? Как Python отслеживает стек вызовов при генерации исключений (traceback) и почему чрезмерное сохранение ссылок на фреймы в глобальных переменных может заблокировать работу сборщика мусора?

Frame хранит контекст выполнения функции, а traceback связывает кадры с местом ошибки. Сохранённая глобальная ссылка удерживает кадр и его локальные объекты живыми, а не отключает сборщик мусора.

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

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

Frame хранит контекст выполнения функции, а traceback связывает кадры с местом ошибки. Сохранённая глобальная ссылка удерживает кадр и его локальные объекты живыми, а не отключает сборщик мусора.

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

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

Frame хранит контекст выполнения функции, а traceback связывает кадры с местом ошибки. Сохранённая глобальная ссылка удерживает кадр и его локальные объекты живыми, а не отключает сборщик мусора.

Через кадр можно получить code object, локальные значения и связь с предыдущим вызовом. Traceback исключения тоже удерживает соответствующие frames. Если такой объект положить в глобальный список, GC не должен освобождать достижимые данные, даже если функция уже завершилась. Это может выглядеть как утечка памяти. Не храните кадры без необходимости; сохраняйте минимальные обезличенные диагностические данные и освобождайте ссылки. Циклические ссылки и недостижимые объекты — другая ситуация, которую обрабатывает механизм GC.

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

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

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

Подробнее