Замыкания и утечки ссылок
Python
Senior
Яндекс
Объясните, как работают замыкания в Python. Как они могут приводить к удержанию ненужных объектов в памяти и как этого избегать?
Ответы
Closures
Замыкание — это функция, которая «запоминает» значения из внешней области видимости, даже если та уже завершилась. Эти значения хранятся в `__closure__`.
Проблема: если во внешней области был тяжёлый объект, ссылка на него может сохраняться в замыкании дольше, чем нужно.
Способы избежать:
- не тянуть в замыкание больше, чем нужно;
- использовать слабые ссылки (`weakref`) для крупных объектов;
- явно разрывать ссылки, когда замыкание больше не используется.