Примечание: следующее относится к CPython (стандартный интерпретатор)
Чтобы понять работу сборщика мусора, вы должны сначала понять, что такое name
, что такое object
и что счетчик ссылок на объект
Возьмите следующую функцию
def foo():
_ = {}
Когда функция выполняется, локальный словарь функции и глобальные объекты, хранящиеся внутри CPython, выглядят примерно так этот. (Это чрезмерно упрощенное объяснение)
-------------------- ------------------------
| name | object_id | | id | reference_count |
-------------------- ------------------------
| _ | 1 | | 1 | 1 |
Когда функция завершена, словарь locals уничтожается, и у любых объектов, на которые есть ссылки, уменьшается их reference_count
------------------------
| id | reference_count |
------------------------
| 1 | 0 |
Сборщик мусора будет в конечном итоге удалите объект с идентификатором 1
, поскольку он больше не имеет ссылок на него, имена ссылок (имена переменных) не имеют значения.
Переменная могла быть названа как угодно и не для сборщика мусора имеет значение только счетчик ссылок на объект