2013-06-26 18 views
5

Ecco un esempio di riferimento ciclico di Python.In Python, qual è il numero di riferimento del riferimento ciclico e perché?

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

dopo questo,

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

Perché a e b avere un conteggio di riferimento del 3 ??

Scusate ragazzi ho appena fatto un errore.

la vera domanda è la diversa.

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

Perché il numero di riferimento di 'GNU' è 4?

Grazie in anticipo :)

+1

Non riesco a riprodurre l'ultimo esempio. – BrenBarn

+0

sto usando la versione 2.7.5 ora. bene funziona sul mio programma. – nextdoordoc

+1

Ancora non riesci a riprodurre la tua domanda aggiornata. 'da sys import getrefcount as r; g = [0]; r (g); g.insert (0, g); r (g)' → 2, 3; Ad ogni modo, prova a controllare il conto * prima * e * dopo * l'inserto. Forse quello che non capisci non è ciò che pensi di non capire. – kojiro

risposta

4

Ci sono 3 i riferimenti a ciascuna:

  1. Nella lista l'altro nel primo elemento.
  2. Come argomento su sys.getrefcount().
  3. L'ambito corrente, vale a dire a e b.
+1

... puoi spiegare perché l'eliminazione di 'b' aumenterebbe il conteggio di' a'? (Anche se non sono stato in grado di riprodurlo qui con Python 2 o 3.) – kojiro

+0

@kojiro: No. Ma non penso che stiamo vedendo tutto. –

+0

oh allora quando cancella b, perché il conteggio di riferimento di a diventa 4? – nextdoordoc

Problemi correlati