Что такое сборщик мусора (Garbage Collector) в Python?

Ответ

Сборщик мусора (Garbage Collector, GC) в Python — это механизм автоматического управления памятью, который освобождает неиспользуемые объекты, предотвращая утечки памяти и оптимизируя потребление ресурсов. Он избавляет разработчика от ручного управления памятью.

В Python GC работает на основе двух основных механизмов:

  1. Подсчёт ссылок (Reference Counting): Основной механизм. Каждый объект имеет счётчик ссылок. Когда количество ссылок на объект становится равным нулю, память, занимаемая этим объектом, немедленно освобождается.
  2. Циклический сборщик (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 подсчёт ссылок является основным и наиболее частым механизмом, а циклический сборщик работает периодически для решения более сложных сценариев.