♻️ Garbage Collector в Python — как он реально работает
Python сам управляет памятью, но делает это не одним, а двумя способами одновременно:
Каждый объект в Python хранит число ссылок на себя:
import sys
a = []
print(sys.getrefcount(a)) # покажет количество ссылок на объект
❗️ Проблема: не справляется с циклическими ссылками:
a = []
a.append(a) # теперь объект содержит ссылку на себя
Чтобы находить такие циклы, Python использует модуль
gc
. Все объекты отслеживаются по «возрасту»:Чем старше объект, тем реже его проверяют, чтобы не тратить ресурсы:
import gc
gc.collect() # вручную запустить сборку мусора
gc.get_count() # сколько объектов в каждом поколении
gc.get_threshold() # когда запускать сборку
Библиотека питониста #буст