Вопрос №38
Осталось:
Как работает управление памятью в Python?
Образцовый ответ
Показывать ответ по умолчанию
Python автоматически управляет памятью, освобождая разработчика от ручного выделения и освобождения памяти.
Подсчёт ссылок:
Каждый объект хранит счётчик ссылок — количество переменных, ссылающихся на него. Когда счётчик достигает нуля, объект удаляется:
import sys a = [1, 2, 3] print(sys.getrefcount(a)) # 2 (a + аргумент функции) b = a # Ещё одна ссылка print(sys.getrefcount(a)) # 3 del b # Удаляем ссылку print(sys.getrefcount(a)) # 2
Сборщик мусора:
Подсчёт ссылок не справляется с циклическими ссылками:
# Циклическая ссылка a = [] b = [] a.append(b) b.append(a) del a, b # Счётчик ссылок не станет 0, но объекты недоступны
Для этого Python запускает сборщик мусора (модуль gc), который находит и удаляет такие циклы.
Основные моменты:
- Подсчёт ссылок — основной механизм, работает мгновенно.
- Сборщик мусора — дополнительный механизм для циклических ссылок.
- del — удаляет ссылку на объект, а не сам объект.
- Разработчику редко нужно вмешиваться в управление памятью — Python справляется сам.
