Python управляет памятью через два дополняющих друг друга механизма: подсчёт ссылок и циклический сборщик мусора.
Каждый объект Python хранит внутренний счётчик, отслеживающий количество ссылок на него. Когда этот счётчик достигает нуля, память немедленно освобождается.
Проверить счётчик ссылок объекта можно так:
import sys
sys.getrefcount(obj)
Примечание: счётчик выглядит завышенным на единицу из-за временной ссылки, создаваемой самой функцией getrefcount.
Подсчёт ссылок сам по себе не справляется с циклическими ссылками — ситуациями, когда объекты ссылаются друг на друга и их счётчики никогда не обнуляются:
a = []
a.append(a) # a ссылается сам на себя — память протекала бы без обнаружения циклов
Встроенный циклический сборщик мусора Python периодически обнаруживает и собирает такие недостижимые циклические ссылки.
gcМодуль gc даёт разработчикам прямой контроль над поведением сборщика мусора:
gc.collect() — вручную запустить цикл сборкиgc.disable() — отключить автоматическую сборку (полезно в производительно-критичном коде)gc.get_threshold() — проверить пороги частоты сборкиgc позволяет тонко настраивать поведение, когда нужен точный контроль над памятьюКогда счётчик ссылок объекта Python достигает нуля, его память немедленно освобождается без ожидания запуска сборщика мусора.
Новый — ещё не проверен сообществом
Вы