Ответ
Сборщик мусора (Garbage Collector, GC) в Python — это механизм автоматического управления памятью, который освобождает неиспользуемые объекты, предотвращая утечки памяти и оптимизируя потребление ресурсов. Он избавляет разработчика от ручного управления памятью.
В Python GC работает на основе двух основных механизмов:
- Подсчёт ссылок (Reference Counting): Основной механизм. Каждый объект имеет счётчик ссылок. Когда количество ссылок на объект становится равным нулю, память, занимаемая этим объектом, немедленно освобождается.
- Циклический сборщик (Generational Garbage Collector): Дополнительный механизм, который периодически запускается для обнаружения и удаления объектов, участвующих в циклических ссылках, которые не могут быть освобождены только подсчётом ссылок.
Пример циклической ссылки:
class Node:
def __init__(self, name):
self.name = name
self.next = None
a = Node("A")
b = Node("B")
a.next = b
b.next = a # Создание циклической ссылки: A -> B -> A
del a
del b # Объекты 'a' и 'b' больше не доступны через эти переменные,
# но их счётчики ссылок не обнулятся из-за цикла.
# Здесь вступает в работу циклический сборщик.
Ключевые особенности и управление:
- Модуль
gc
предоставляет интерфейс для взаимодействия со сборщиком мусора, например,gc.disable()
для отключения илиgc.collect()
для принудительного запуска. - Отключение GC обычно не рекомендуется, так как может привести к неконтролируемому росту потребления памяти.
- В CPython подсчёт ссылок является основным и наиболее частым механизмом, а циклический сборщик работает периодически для решения более сложных сценариев.