Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: reference, counting

Что такое подсчет ссылок (reference counting) в механизме сборки мусора?

Этот вопрос проверяет понимание основного механизма управления памятью в Python — подсчета ссылок.

Короткий ответ

Подсчет ссылок — это простой механизм сборки мусора, при котором каждый объект хранит счетчик количества ссылок на себя. Когда создается новая ссылка на объект, счетчик увеличивается. Когда ссылка удаляется — счетчик уменьшается. Когда счетчик достигает нуля, память объекта немедленно освобождается. Этот механизм работает быстро и предсказуемо, но не может обрабатывать циклические ссылки, когда два объекта ссылаются друг на друга.

Длинный ответ

Подсчет ссылок — это фундаментальный механизм управления памятью в Python, который работает автоматически для всех объектов.

1. Принцип работы подсчета ссылок

  • Каждый объект имеет счетчик ссылок: Хранится в заголовке объекта

  • Увеличение счетчика: При создании новой ссылки на объект

  • Уменьшение счетчика: При удалении ссылки или выходе из области видимости

  • Немедленное освобождение: Когда счетчик достигает нуля

2. Пример работы

import sys

# Создаем объект, счетчик = 1
a = [1, 2, 3]
print(sys.getrefcount(a))  # 2 (временная ссылка при вызове функции)

# Увеличиваем счетчик
b = a  # Теперь две ссылки на один объект
print(sys.getrefcount(a))  # 3

# Уменьшаем счетчик
del b  # Удаляем одну ссылку
print(sys.getrefcount(a))  # 2

# Выход из области видимости
def test():
    local_var = a
    print(sys.getrefcount(a))  # 3 внутри функции

test()
print(sys.getrefcount(a))  # 2 после выхода из функции

3. Ограничения подсчета ссылок

  • Циклические ссылки: Не определяются автоматически

python

# Циклическая ссылка
list1 = []
list2 = [list1]
list1.append(list2)
# После del list1, list2 счетчики не обнулятся

Вывод: Подсчет ссылок эффективно управляет большинством объектов в Python, обеспечивая немедленное освобождение памяти. Однако для обработки циклических ссылок требуется дополнительный механизм — сборщик мусора на поколениях.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    6

Навыки

  • Python

    Python

Ключевые слова

#reference

#counting

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.