Вопрос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 справляется сам.