2016-07-27 55 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引用计数是如此之高,因为已经有在我结合的名称a给它的时间保持的3一个整数值的对象。 Python如何跟踪哪个对象持有3,以便它将名称a绑定到它并相应地增加其引用计数?

回答

0
  1. gc.get_referrers只返回对象的周期检测GC知道。不可能参与参考循环的对象不需要由循环检测器跟踪,因此它们可能不会显示在get_referrers列表中。
  2. 随着this array here

    static PyIntObject *small_ints[NSMALLNEGINTS + NSMALLPOSINTS];