Frame хранит контекст выполнения функции, а traceback связывает кадры с местом ошибки. Сохранённая глобальная ссылка удерживает кадр и его локальные объекты живыми, а не отключает сборщик мусора.
Что такое Frame Objects (types.FrameType)? Как Python отслеживает стек вызовов при генерации исключений (traceback) и почему чрезмерное сохранение ссылок на фреймы в глобальных переменных может заблокировать работу сборщика мусора?
Frame хранит контекст выполнения функции, а traceback связывает кадры с местом ошибки. Сохранённая глобальная ссылка удерживает кадр и его локальные объекты живыми, а не отключает сборщик мусора.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Frame хранит контекст выполнения функции, а traceback связывает кадры с местом ошибки. Сохранённая глобальная ссылка удерживает кадр и его локальные объекты живыми, а не отключает сборщик мусора.
Через кадр можно получить code object, локальные значения и связь с предыдущим вызовом. Traceback исключения тоже удерживает соответствующие frames. Если такой объект положить в глобальный список, GC не должен освобождать достижимые данные, даже если функция уже завершилась. Это может выглядеть как утечка памяти. Не храните кадры без необходимости; сохраняйте минимальные обезличенные диагностические данные и освобождайте ссылки. Циклические ссылки и недостижимые объекты — другая ситуация, которую обрабатывает механизм GC.