Python хранит все объекты и структуры данных в приватном heap-пространстве. Разработчики не могут напрямую обращаться к этому heap — он полностью управляется менеджером памяти Python, который берёт на себя всё выделение и освобождение памяти.
Менеджер памяти выступает как слой абстракции между Python и операционной системой. Он отвечает за:
Основная стратегия управления памятью в CPython — это reference counting (подсчёт ссылок). Каждый объект хранит внутренний счётчик, который отслеживает, сколько ссылок на него указывает.
0, объект немедленно удаляетсяУ подсчёта ссылок есть критический недостаток — он не справляется с циклическими ссылками, когда два или более объектов ссылаются друг на друга:
object_a.ref = object_b
object_b.ref = object_a
В таком случае счётчик ссылок ни одного из объектов никогда не достигнет 0. Python решает эту проблему с помощью дополнительного циклического сборщика мусора, который периодически обнаруживает и очищает такие циклы.
| Механизм | Назначение |
|---|---|
| Подсчёт ссылок | Немедленное удаление большинства объектов |
| Циклический GC | Очистка циклических ссылок |
В CPython, когда счётчик ссылок объекта достигает нуля, он немедленно освобождается менеджером памяти без ожидания запуска сборщика мусора.
Новый — ещё не проверен сообществом
Вы