В Python управление памятью основано на подсчёте ссылок (reference counting) и дополнительном сборщике мусора для циклических ссылок.
Как работает garbage collector в Python? Расскажите про него.
В Python управление памятью основано на подсчёте ссылок (reference counting) и дополнительном сборщике мусора для циклических ссылок.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В Python управление памятью основано на подсчёте ссылок (reference counting) и дополнительном сборщике мусора для циклических ссылок.
Основные моменты:
- Подсчёт ссылок: Каждый объект в Python хранит счётчик ссылок — количество активных ссылок на него. Когда счётчик падает до нуля, объект сразу удаляется и память освобождается.
- Проблема циклических ссылок: Если объекты ссылаются друг на друга, но не используются, подсчёт ссылок не сможет их удалить, так как счётчики не равны нулю.
- Сборщик мусора (GC): Для решения проблемы циклов используется модуль
gc, который периодически ищет циклы объектов, недоступных из программы, и удаляет их. - Как работает GC: Он делит объекты на поколения (generation 0, 1, 2) и чаще проверяет молодые объекты. Это оптимизирует производительность.
Пример вызова сборщика вручную:
import gc
# Вызвать сборщик мусора
collected = gc.collect()
print(f"Собрано объектов: {collected}")
Таким образом, Python сочетает быстрый подсчёт ссылок с периодическим поиском циклических ссылок для эффективного управления памятью.