Из любопытства я пытаюсь понять, как работает подсчет ссылок в Python. Эти две записи:Все еще запутано в отношении подсчета ссылок
- Why are Python Ref Counts to small integers surprisingly high?
- Is there a way to get the current ref count of an object in Python?
были полезны, но по-прежнему вызывает вопросы.
Использование
sys.getrefcount()
возвращает другое значение, чемlen(gc.get_referrers())
. Например:>>> a = 3 >>> print sys.getrefcount(a) 38 >>> print len(gc.get_referrers(a)) 23
Почему разница?
Как я понимаю, счетчик ссылок на
a
настолько высок, потому что уже есть объект, содержащий целочисленное значение3
в то время я связан имяa
к нему. Как Python отслеживает, какой объект держит3
, так что он связывает имяa
с ним и соответственно увеличивает его счетчик ссылок?