Как сборщик мусора (Garbage Collector) определяет, какие объекты удалять

Python Senior VK
Как сборщик мусора (Garbage Collector) определяет, какие объекты удалять
Ответы
В Python используется подсчёт ссылок (reference counting) и циклический сборщик мусора (generational GC) для обнаружения и удаления объектов. - **Подсчёт ссылок**: Каждый объект хранит счётчик ссылок. Когда он становится 0, память освобождается. ``` a = [1, 2, 3] # счётчик = 1 b = a # счётчик = 2 del b # счётчик = 1 a = None # счётчик = 0 → удаление ``` - **Циклический сборщик (Generational GC)**: Обходит объекты в трёх поколениях (0, 1, 2). Если объект выживает сборку, он переходит в следующее поколение. Циклы (например, `a.ref = b; b.ref = a`) обнаруживаются и удаляются. **Нюансы**: - `gc.disable()` отключает циклический GC, но не подсчёт ссылок. - `__del__` может мешать сборке, если создаёт новые ссылки. - Weakref (`weakref.ref`) не увеличивает счётчик ссылок.