Какие механизмы garbage collection знаешь
Python
Senior
Без компании
Какие механизмы garbage collection знаешь
Ответы
В Python используется автоматический garbage collection с подсчётом ссылок (reference counting) и циклический сборщик мусора (generation GC).
- **Reference Counting**
Каждый объект имеет счётчик ссылок. При создании ссылки счётчик увеличивается, при удалении — уменьшается. Когда счётчик достигает нуля, память освобождается.
```
a = [] # счетчик = 1
b = a # счетчик = 2
del b # счетчик = 1
```
- **Generational GC**
Объекты делятся на 3 поколения (0, 1, 2). Новые объекты попадают в поколение 0. Если объект переживает сборку мусора, он переходит в следующее поколение. Сборщик чаще проверяет молодые поколения.
```
import gc
gc.collect() # принудительный запуск GC
```
- **Циклические ссылки**
Reference counting не может их обработать, поэтому Generational GC ищет недостижимые циклы и удаляет их.
```
x = []
x.append(x) # циклическая ссылка
del x # GC удалит объект
```