gc.md
1> **Источник:** https://python-all.ru/3.4/library/gc.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 29.11. [`gc`](https://python-all.ru/3.4/library/gc.html#module-gc) – Интерфейс сборщика мусора89Этот модуль предоставляет интерфейс к опциональному сборщику мусора. Он позволяет отключить сборщик, настроить частоту сборки и установить параметры отладки. Также предоставляет доступ к недостижимым объектам, которые сборщик нашёл, но не может освободить. Поскольку сборщик дополняет подсчёт ссылок, уже используемый в Python, вы можете отключить сборщик, если уверены, что ваша программа не создаёт циклические ссылки. Автоматическую сборку можно отключить вызовом `gc.disable()`. Для отладки программы с утечками вызовите `gc.set_debug(gc.DEBUG_LEAK)`. Обратите внимание, что это включает `gc.DEBUG_SAVEALL`, в результате чего объекты, собранные сборщиком мусора, сохраняются в gc.garbage для проверки.1011Модуль [`gc`](https://python-all.ru/3.4/library/gc.html#module-gc) предоставляет следующие функции:1213#### `gc.enable()`1415Включить автоматическую сборку мусора.1617#### `gc.disable()`1819Отключить автоматическую сборку мусора.2021#### `gc.isenabled()`2223Возвращает истину, если автоматическая сборка включена.2425#### `gc.collect(generations=2)`2627Без аргументов выполняет полную сборку. Необязательный аргумент *generation* может быть целым числом, указывающим, какое поколение собирать (от 0 до 2). Если номер поколения недействителен, возбуждается [`ValueError`](https://python-all.ru/3.4/library/exceptions.html#ValueError). Возвращается количество найденных недостижимых объектов.2829Свободные списки, поддерживаемые для ряда встроенных типов, очищаются при каждой полной сборке или сборке самого старшего поколения (2). Не все элементы в некоторых свободных списках могут быть освобождены из-за особенностей реализации, в частности [`float`](https://python-all.ru/3.4/library/functions.html#float).3031#### `gc.set_debug(flags)`3233Устанавливает флаги отладки сборки мусора. Отладочная информация будет записываться в `sys.stderr`. См. ниже список флагов отладки, которые можно комбинировать с помощью побитовых операций для управления отладкой.3435#### `gc.get_debug()`3637Возвращает текущие установленные флаги отладки.3839#### `gc.get_objects()`4041Возвращает список всех объектов, отслеживаемых сборщиком, за исключением возвращаемого списка.4243#### `gc.get_stats()`4445Возвращает список из трёх словарей по поколениям, содержащих статистику сборки с момента запуска интерпретатора. Количество ключей может измениться в будущем, но в настоящее время каждый словарь содержит следующие элементы:4647- `collections` – количество раз, когда это поколение было собрано;48- `collected` – общее количество объектов, собранных внутри этого поколения;49- `uncollectable` – общее количество объектов, которые оказались несобираемыми (и поэтому были перемещены в список [`garbage`](https://python-all.ru/3.4/library/gc.html#gc.garbage)) внутри этого поколения.5051Новое в версии 3.4.5253#### `gc.set_threshold(threshold0[, threshold1[, threshold2]])`5455Устанавливает пороги сборки мусора (частоту сборки). Установка *threshold0* в ноль отключает сборку.5657Сборщик мусора классифицирует объекты по трём поколениям в зависимости от того, сколько циклов сборки они пережили. Новые объекты помещаются в самое молодое поколение (поколение `0`). Если объект переживает сборку, он перемещается в следующее более старое поколение. Поскольку поколение `2` является самым старым, объекты в этом поколении остаются там после сборки. Чтобы решить, когда запускаться, сборщик отслеживает количество выделений и освобождений объектов с момента последней сборки. Когда количество выделений минус количество освобождений превышает *threshold0*, начинается сборка. Изначально проверяется только поколение `0`. Если поколение `0` проверялось более *threshold1* раз с тех пор, как проверялось поколение `1`, то также проверяется поколение `1`. Аналогично, *threshold2* управляет количеством сборок поколения `1` перед сборкой поколения `2`.5859#### `gc.get_count()`6061Возвращает текущие счётчики сборки в виде кортежа `(count0, count1, count2)`.6263#### `gc.get_threshold()`6465Возвращает текущие пороги сборки в виде кортежа `(threshold0, threshold1, threshold2)`.6667#### `gc.get_referrers(*objs)`6869Возвращает список объектов, которые напрямую ссылаются на любой из objs. Эта функция находит только те контейнеры, которые поддерживают сборку мусора; типы расширений, которые ссылаются на другие объекты, но не поддерживают сборку мусора, найдены не будут.7071Обратите внимание, что объекты, на которые уже нет ссылок, но которые находятся в циклах и ещё не были собраны сборщиком мусора, могут быть перечислены среди результирующих ссылающихся объектов. Чтобы получить только текущие живые объекты, вызовите [`collect()`](https://python-all.ru/3.4/library/gc.html#gc.collect) перед вызовом [`get_referrers()`](https://python-all.ru/3.4/library/gc.html#gc.get_referrers).7273Следует соблюдать осторожность при использовании объектов, возвращаемых [`get_referrers()`](https://python-all.ru/3.4/library/gc.html#gc.get_referrers), поскольку некоторые из них могут всё ещё находиться в процессе построения и, следовательно, во временно недействительном состоянии. Избегайте использования [`get_referrers()`](https://python-all.ru/3.4/library/gc.html#gc.get_referrers) для любых целей, кроме отладки.7475#### `gc.get_referents(*objs)`7677Возвращает список объектов, на которые непосредственно ссылается любой из аргументов. Возвращаемые референты – это объекты, посещаемые C-уровневым методом [`tp_traverse`](https://python-all.ru/3.4/c-api/typeobj.html#c.PyTypeObject.tp_traverse) аргументов (если он есть), и могут не включать все объекты, фактически достижимые напрямую. Методы [`tp_traverse`](https://python-all.ru/3.4/c-api/typeobj.html#c.PyTypeObject.tp_traverse) поддерживаются только объектами, которые поддерживают сборку мусора, и требуются только для посещения объектов, которые могут быть вовлечены в цикл. Так, например, если целое число напрямую достижимо из аргумента, этот объект целого числа может как появиться, так и не появиться в результирующем списке.7879#### `gc.is_tracked(obj)`8081Возвращает `True`, если объект в настоящее время отслеживается сборщиком мусора, и `False` в противном случае. Как правило, экземпляры атомарных типов не отслеживаются, а экземпляры неатомарных типов (контейнеры, пользовательские объекты...) отслеживаются. Однако могут присутствовать некоторые оптимизации для конкретных типов, чтобы уменьшить влияние на сборщик мусора для простых экземпляров (например, словари, содержащие только атомарные ключи и значения):8283```python84>>> gc.is_tracked(0)85False86>>> gc.is_tracked("a")87False88>>> gc.is_tracked([])89True90>>> gc.is_tracked({})91False92>>> gc.is_tracked({"a": 1})93False94>>> gc.is_tracked({"a": []})95True96```9798Новое в версии 3.1.99100Следующие переменные предназначены для доступа только для чтения (можно изменять их значения, но не следует их переназначать):101102#### `gc.garbage`103104Список объектов, которые сборщик нашёл недостижимыми, но не смог освободить (несобираемые объекты). Начиная с Python 3.4, этот список большую часть времени должен быть пуст, за исключением случаев использования экземпляров типов C-расширений с ненулевым слотом `tp_del`.105106Если установлен [`DEBUG_SAVEALL`](https://python-all.ru/3.4/library/gc.html#gc.DEBUG_SAVEALL), то все недостижимые объекты будут добавлены в этот список, а не освобождены.107108Изменено в версии 3.2: Если при завершении интерпретатора этот список не пуст, выдается [`ResourceWarning`](https://python-all.ru/3.4/library/exceptions.html#ResourceWarning), которая по умолчанию молчалива. Если также установлен [`DEBUG_UNCOLLECTABLE`](https://python-all.ru/3.4/library/gc.html#gc.DEBUG_UNCOLLECTABLE), дополнительно выводятся все несобираемые объекты.109110Изменено в версии 3.4: В соответствии с [**PEP 442**](https://python-all.ru/3.4/library/gc.html), объекты с методом [`__del__()`](https://python-all.ru/3.4/reference/datamodel.html#object.__del__) больше не попадают в [`gc.garbage`](https://python-all.ru/3.4/library/gc.html#gc.garbage).111112#### `gc.callbacks`113114Список колбэков, которые будут вызываться сборщиком мусора до и после сборки. Колбэки будут вызываться с двумя аргументами: *phase* и *info*.115116*phase* может принимать одно из двух значений:117118> “start”: сборка мусора начинается.119>120> “stop”: сборка мусора завершена.121122*info* – это словарь, предоставляющий дополнительную информацию для колбэка. В настоящее время определены следующие ключи:123124> “generation”: самое старое поколение, участвующее в сборке.125>126> “collected”: когда *phase* равен “stop”, количество успешно собранных объектов.127>128> «uncollectable»: когда *phase* равен «stop», количество объектов, которые не удалось собрать и которые были помещены в [`garbage`](https://python-all.ru/3.4/library/gc.html#gc.garbage).129130Приложения могут добавлять свои собственные колбэки в этот список. Основные случаи использования:131132> Сбор статистики о сборке мусора, например, как часто собираются различные поколения и сколько времени занимает сборка.133>134> Позволяет приложениям определять и очищать свои собственные несобираемые типы, когда они появляются в [`garbage`](https://python-all.ru/3.4/library/gc.html#gc.garbage).135136Новое в версии 3.3.137138Следующие константы предоставляются для использования с [`set_debug()`](https://python-all.ru/3.4/library/gc.html#gc.set_debug):139140#### `gc.DEBUG_STATS`141142Вывод статистики во время сборки. Эта информация может быть полезна при настройке частоты сборки.143144#### `gc.DEBUG_COLLECTABLE`145146Вывод информации о найденных собираемых объектах.147148#### `gc.DEBUG_UNCOLLECTABLE`149150Выводит информацию о найденных несобираемых объектах (объекты, которые не являются достижимыми, но не могут быть освобождены сборщиком). Эти объекты будут добавлены в список `garbage`.151152Изменено в версии 3.2: Также выводить содержимое списка [`garbage`](https://python-all.ru/3.4/library/gc.html#gc.garbage) при завершении интерпретатора, если он не пуст.153154#### `gc.DEBUG_SAVEALL`155156Если установлен, все найденные недостижимые объекты будут добавляться в *garbage*, а не освобождаться. Это может быть полезно для отладки программы с утечками.157158#### `gc.DEBUG_LEAK`159160Флаги отладки, необходимые сборщику для вывода информации об утекающей программе (равны `DEBUG_COLLECTABLE | DEBUG_UNCOLLECTABLE | DEBUG_SAVEALL`).161