2016-07-27 53 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];