Sobes.tech
Back to questions
Middle
7

Как работает garbage collector в Python? Если ячейка памяти ссылается на другую ячейку памяти — удалит ли GC обе ссылки или ничего не удалит?

Companies where asked
sber tech

Answer from AI

sobes.tech AI

В Python сборщик мусора (garbage collector, GC) работает на основе подсчёта ссылок и дополнительно использует алгоритм обнаружения циклических ссылок.

  • Каждый объект хранит счётчик ссылок — количество активных ссылок на него.
  • Когда счётчик становится 0, объект сразу удаляется.
  • Однако, если объекты ссылаются друг на друга циклично, но не доступны из программы, счётчики не становятся 0.
  • Для таких случаев Python запускает циклический сборщик, который ищет и удаляет циклы объектов, недоступных из кода.

Если ячейка памяти (объект) ссылается на другую, GC не удалит обе, если на них ещё есть внешние ссылки. Если же обе связаны циклом и недоступны, то циклический GC удалит весь цикл целиком.

Пример:

import gc

a = []
b = [a]
a.append(b)

# a и b ссылаются друг на друга, создавая цикл
# Если удалить внешние ссылки:
del a
# b всё ещё существует

del b

# Теперь цикл недоступен, GC может его собрать
gc.collect()