2016-07-27 6 views
1

Из любопытства я пытаюсь понять, как работает подсчет ссылок в Python. Эти две записи:Все еще запутано в отношении подсчета ссылок

были полезны, но по-прежнему вызывает вопросы.

  1. Использование sys.getrefcount() возвращает другое значение, чем len(gc.get_referrers()). Например:

    >>> a = 3 
    >>> print sys.getrefcount(a) 
    38 
    >>> print len(gc.get_referrers(a)) 
    23 
    

    Почему разница?

  2. Как я понимаю, счетчик ссылок на a настолько высок, потому что уже есть объект, содержащий целочисленное значение 3 в то время я связан имя a к нему. Как Python отслеживает, какой объект держит 3, так что он связывает имя a с ним и соответственно увеличивает его счетчик ссылок?

ответ

0
  1. gc.get_referrers возвращает только объекты цикл обнаружения ГХ знает. Объекты, которые не могут быть задействованы в эталонном цикле, не должны отслеживаться детектором цикла, поэтому они могут не отображаться в списке get_referrers.
  2. С this array here:

    static PyIntObject *small_ints[NSMALLNEGINTS + NSMALLPOSINTS]; 
    

 Смежные вопросы

  • Нет связанных вопросов^_^