Сборщик мусора в Python удаляет объекты из памяти, если на них не ссылается ни одна переменная. 4
В Python переменные не хранят значения, а выступают в роли ссылок на объекты. 3 Каждый объект содержит дополнительное поле (счётчик ссылок), в котором хранится количество ссылок на него. 3 Как только кто-то ссылается на объект, это поле увеличивается на единицу. 3 Если по какой-то причине ссылка пропадает, то это поле уменьшается на один. 3
Когда счётчик ссылок для определённого объекта достигает нуля, интерпретатор запускает процесс уничтожения объекта. 3 Если удалённый объект содержал ссылки на другие объекты, то эти ссылки также удаляются. 3 Таким образом, удаление одного объекта может повлечь за собой удаление других. 3
Сборщик мусора не работает постоянно, а изучает разные объекты с разной частотой. 1 Объекты разделяются на три генерации по сроку своей жизни. 1 У каждого поколения есть свой счётчик, который увеличивается при выделении памяти объектам этого поколения и уменьшается при её высвобождении. 1 Как только это значение пересечёт определённый порог, запустится процесс сборки мусора. 1
Если два объекта будут через свои атрибуты ссылаться друг на друга, то сборщик мусора их не станет удалять, даже если ни одна переменная в исполняемом коде на эти объекты не ссылается. 4 В таком случае говорят про «утечку» памяти. 4