Как сборщик мусора работает с циклическими ссылками

Python Senior VK
Как сборщик мусора работает с циклическими ссылками
Ответы
Python использует алгоритм подсчета ссылок в сочетании с generational garbage collector (GC) для обработки циклических ссылок. Когда объекты ссылаются друг на друга, но нет внешних ссылок, их счетчик ссылок никогда не достигнет нуля. GC выявляет такие изолированные циклы и удаляет их. Пример циклической ссылки: ``` class Node: def __init__(self): self.ref = None a = Node() b = Node() a.ref = b b.ref = a # Циклическая ссылка a = b = None # Теперь объекты изолированы ``` GC работает в 3 поколениях (0, 1, 2). Новые объекты попадают в поколение 0. Если они выживают сборку мусора, переходят в следующее поколение. Для циклических ссылок используется алгоритм mark-and-sweep: помечает достижимые объекты, затем удаляет непомеченные.