2013-06-26 25 views
5

以下是Python的循環引用的示例。在Python中,循環引用的引用計數是多少?爲什麼?

>>> a = [1] 
>>> b = [2] 
>>> a.append(b) 
>>> b.append(a) 

在此之後,

>>> sys.getrefcount(a) = 3 
>>> sys.getrefcount(b) = 3 

爲什麼ab有3引用計數?

對不起,我只是犯了一個錯誤。

真正的問題是不同的。

>>> GNU = ['is not Unix'] 
>>> GNU.insert(0, GNU) 
>>> sys.getrefcount(GNU) = 4 

爲什麼'GNU'的引用計數是4?

感謝提前:)

+1

我無法複製你的最後一個例子。 – BrenBarn

+0

我現在在使用2.7.5版本。它適用於我的程序。 – nextdoordoc

+1

仍然無法重現您更新的問題。 'from sys import getrefcount as r; g = [0]; r(g); g.insert(0,g); r(g)'→2,3;無論如何,嘗試在插入之前在*和*之前檢查refcount *。也許你不明白的不是你認爲你不明白的東西。 – kojiro

回答

4

有3所引用的每個:

  1. 在第一個元素對方的列表。
  2. 作爲sys.getrefcount()的參數。
  3. 當前範圍,即綁定到ab
+1

...你能解釋爲什麼刪除'b'會增加'a'的refcount嗎? (雖然我還沒有能夠在Python 2或3中重現這一點)。 – kojiro

+0

@kojiro:沒有。但我不認爲我們也看到了一切。 –

+0

哦那麼當刪除b時,爲什麼a的引用計數變爲4? – nextdoordoc

相關問題