Как работает сборщик мусора (Garbage Collector) в Python
Python
Senior
Без компании
Как работает сборщик мусора (Garbage Collector) в Python
Ответы
В Python используется алгоритм подсчёта ссылок (reference counting) + generational garbage collection для обнаружения циклических ссылок.
**Reference counting:**
- Каждый объект хранит счётчик ссылок на него
- При создании объекта счетчик = 1
- При добавлении новой ссылки счетчик увеличивается
- При удалении ссылки - уменьшается
- Когда счетчик достигает 0, память освобождается
Пример:
```
a = [1, 2, 3] # refcount = 1
b = a # refcount = 2
del a # refcount = 1
b = None # refcount = 0 -> память освобождена
```
**Generational GC:**
- Обнаруживает циклические ссылки (когда refcount никогда не станет 0)
- Работает в 3 поколениях (0 - новые объекты, 2 - старые)
- Чаще проверяет молодые объекты
- Использует алгоритм mark-and-sweep
GC можно контролировать через модуль `gc`:
```
import gc
gc.disable() # отключить сборщик
gc.collect() # принудительный сбор
```