Как сборщик мусора (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`) не увеличивает счётчик ссылок.