2013-06-26 7 views
5

Hier ist ein Beispiel einer zyklischen Referenz von Python.In Python, was ist die Referenzzahl der zyklischen Referenz und warum?

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

nach diesem,

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

Warum a und b haben einen Referenzzähler von 3 ??

Sorry Leute, ich habe gerade einen Fehler gemacht.

die wirkliche Frage ist die andere.

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

Warum ist die Referenzzahl von 'GNU' 4?

Vielen Dank im Voraus :)

+1

Ich kann Ihr letztes Beispiel nicht reproduzieren. – BrenBarn

+0

ich benutze jetzt 2.7.5 Version. Nun, es funktioniert auf meinem Programm. – nextdoordoc

+1

Noch kann Ihre aktualisierte Frage nicht reproduziert werden. 'Von sys import getrefcount als r; g = [0]; r (g); g.insert (0, g); r (g)' → 2, 3; Wie auch immer, versuchen Sie, den Refcount * vor * und * nach dem Einfügen zu überprüfen. Vielleicht verstehst du nicht, was du nicht verstehst. – kojiro

Antwort

4

Es gibt 3 Verweise auf jeder:

  1. In der Liste der andere in dem ersten Element.
  2. Als ein Argument zu sys.getrefcount().
  3. Der aktuelle Umfang, d. H. Gebunden an a und b.
+1

... kann erklären, warum 'Löschen b' erhöhen würde' a' der refcount? (Obwohl ich nicht in der Lage, das zu reproduzieren hier mit Python 2 oder 3.) – kojiro

+0

@kojiro: Nein. Aber ich glaube auch nicht, dass wir alles sehen. –

+0

oh dann, wenn b löschen, warum die Referenzzahl von a wird 4? – nextdoordoc