gc.md
1> **Источник:** https://python-all.ru/3.0/library/gc.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `gc` – интерфейс сборщика мусора89Этот модуль предоставляет интерфейс к опциональному сборщику мусора. Он позволяет отключить сборщик, настроить частоту сборки и установить параметры отладки. Также предоставляет доступ к недостижимым объектам, которые сборщик нашёл, но не может освободить. Поскольку сборщик дополняет подсчёт ссылок, уже используемый в Python, вы можете отключить сборщик, если уверены, что ваша программа не создаёт циклические ссылки. Автоматическую сборку можно отключить вызовом `gc.disable()`. Для отладки программы с утечками вызовите `gc.set_debug(gc.DEBUG_LEAK)`. Обратите внимание, что это включает `gc.DEBUG_SAVEALL`, в результате чего объекты, собранные сборщиком мусора, сохраняются в gc.garbage для проверки.1011Модуль `gc` предоставляет следующие функции:1213#### `[gc.enable]gc.enable()`1415Включить автоматическую сборку мусора.1617#### `[gc.disable]gc.disable()`1819Отключить автоматическую сборку мусора.2021#### `[gc.isenabled]gc.isenabled()`2223Возвращает истину, если автоматическая сборка включена.2425#### `[gc.collect]gc.collect([generation])`2627Без аргументов выполняет полную сборку. Необязательный аргумент *generation* может быть целым числом, указывающим, какое поколение собирать (от 0 до 2). Если номер поколения недействителен, возбуждается [`ValueError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.ValueError). Возвращается количество найденных недостижимых объектов.2829Списки свободной памяти, поддерживаемые для ряда встроенных типов, очищаются при каждом полном сборе или сборе самого старшего поколения (2). Не все элементы в некоторых таких списках могут быть освобождены из-за особенностей реализации, в частности [`float`](https://python-all.ru/3.0/library/functions.html#float).3031#### `[gc.set_debug]gc.set_debug(flags)`3233Устанавливает флаги отладки сборки мусора. Отладочная информация будет записываться в3435`sys.stderr`3637. См. ниже список флагов отладки, которые можно комбинировать с помощью побитовых операций для управления отладкой.3839#### `[gc.get_debug]gc.get_debug()`4041Возвращает текущие установленные флаги отладки.4243#### `[gc.get_objects]gc.get_objects()`4445Возвращает список всех объектов, отслеживаемых сборщиком, за исключением возвращаемого списка.4647#### `[gc.set_threshold]gc.set_threshold(threshold0[, threshold1[, threshold2]])`4849Устанавливает пороги сборки мусора (частоту сборки). Установка *threshold0* в ноль отключает сборку.5051Сборщик мусора классифицирует объекты по трём поколениям в зависимости от того, сколько циклов сборки они пережили. Новые объекты помещаются в самое молодое поколение (поколение `0`). Если объект переживает сборку, он перемещается в следующее более старое поколение. Поскольку поколение `2` является самым старым, объекты в этом поколении остаются там после сборки. Чтобы решить, когда запускаться, сборщик отслеживает количество выделений и освобождений объектов с момента последней сборки. Когда количество выделений минус количество освобождений превышает *threshold0*, начинается сборка. Изначально проверяется только поколение `0`. Если поколение `0` проверялось более *threshold1* раз с тех пор, как проверялось поколение `1`, то также проверяется поколение `1`. Аналогично, *threshold2* управляет количеством сборок поколения `1` перед сборкой поколения `2`.5253#### `[gc.get_count]gc.get_count()`5455Возвращает текущие счётчики сборки в виде кортежа5657`(count0, count1, count2)`5859.6061#### `[gc.get_threshold]gc.get_threshold()`6263Возвращает текущие пороги сборки в виде кортежа6465`(threshold0, threshold1, threshold2)`6667.6869#### `[gc.get_referrers]gc.get_referrers(*objs)`7071Возвращает список объектов, которые напрямую ссылаются на любой из objs. Эта функция находит только те контейнеры, которые поддерживают сборку мусора; типы расширений, которые ссылаются на другие объекты, но не поддерживают сборку мусора, найдены не будут.7273Обратите внимание, что объекты, на которые уже нет ссылок, но которые находятся в циклах и ещё не были собраны сборщиком мусора, могут быть перечислены среди результирующих ссылающихся объектов. Чтобы получить только текущие живые объекты, вызовите [`collect()`](https://python-all.ru/3.0/library/gc.html#gc.collect) перед вызовом [`get_referrers()`](https://python-all.ru/3.0/library/gc.html#gc.get_referrers).7475Следует соблюдать осторожность при использовании объектов, возвращаемых [`get_referrers()`](https://python-all.ru/3.0/library/gc.html#gc.get_referrers), поскольку некоторые из них могут всё ещё находиться в процессе построения и, следовательно, во временно недействительном состоянии. Избегайте использования [`get_referrers()`](https://python-all.ru/3.0/library/gc.html#gc.get_referrers) для любых целей, кроме отладки.7677#### `[gc.get_referents]gc.get_referents(*objs)`7879Возвращает список объектов, на которые непосредственно ссылается любой из аргументов. Возвращаемые референты – это объекты, посещаемые C-уровневым методом8081[`tp_traverse`](https://python-all.ru/3.0/c-api/typeobj.html#tp_traverse)8283аргументов (если он есть), и могут не включать все объекты, фактически достижимые напрямую. Методы8485[`tp_traverse`](https://python-all.ru/3.0/c-api/typeobj.html#tp_traverse)8687поддерживаются только объектами, которые поддерживают сборку мусора, и требуются только для посещения объектов, которые могут быть вовлечены в цикл. Так, например, если целое число напрямую достижимо из аргумента, этот объект целого числа может как появиться, так и не появиться в результирующем списке.8889Следующая переменная предоставляется для доступа только для чтения (можно изменять её значение, но не следует переназначать её):9091#### `[gc.garbage]gc.garbage`9293Список объектов, которые сборщик счёл недостижимыми, но не смог освободить (несобираемые объекты). По умолчанию этот список содержит только объекты с методами [`__del__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__del__). Объекты, имеющие методы [`__del__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__del__) и входящие в циклическую ссылку, делают всю циклическую ссылку несобираемой, включая объекты, не обязательно находящиеся в цикле, но достижимые только из него. Python не собирает такие циклы автоматически, потому что, вообще говоря, Python не может угадать безопасный порядок выполнения методов [`__del__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__del__). Если известен безопасный порядок, можно принудительно решить проблему, изучив список *garbage* и явно разрывая циклы, обусловленные вашими объектами в этом списке. Обратите внимание, что эти объекты остаются живыми благодаря нахождению в списке *garbage*, поэтому их также следует удалить из *garbage*. Например, после разрыва циклов выполните `del gc.garbage[:]`, чтобы очистить список. Обычно лучше избегать этой проблемы, не создавая циклы, содержащие объекты с методами [`__del__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__del__); в таком случае можно проверить *garbage*, чтобы убедиться, что такие циклы не создаются.9495Если [`DEBUG_SAVEALL`](https://python-all.ru/3.0/library/gc.html#gc.DEBUG_SAVEALL) установлен, то все недостижимые объекты будут добавлены в этот список, а не освобождены.9697Следующие константы предоставляются для использования с [`set_debug()`](https://python-all.ru/3.0/library/gc.html#gc.set_debug):9899#### `[gc.DEBUG_STATS]gc.DEBUG_STATS`100101Вывод статистики во время сборки. Эта информация может быть полезна при настройке частоты сборки.102103#### `[gc.DEBUG_COLLECTABLE]gc.DEBUG_COLLECTABLE`104105Вывод информации о найденных собираемых объектах.106107#### `[gc.DEBUG_UNCOLLECTABLE]gc.DEBUG_UNCOLLECTABLE`108109Выводит информацию о найденных несобираемых объектах (объектах, которые недостижимы, но не могут быть освобождены сборщиком). Эти объекты будут добавлены в список110111`garbage`112113.114115#### `[gc.DEBUG_SAVEALL]gc.DEBUG_SAVEALL`116117Если установлен, все найденные недостижимые объекты будут добавляться в118119*garbage*120121, а не освобождаться. Это может быть полезно для отладки программы с утечками.122123#### `[gc.DEBUG_LEAK]gc.DEBUG_LEAK`124125Флаги отладки, необходимые сборщику для вывода информации об утекающей программе (равны126127`DEBUG_COLLECTABLE | DEBUG_UNCOLLECTABLE | DEBUG_SAVEALL`128129).130131Сноски132