Non sono in grado di capire cosa sta succedendo qui. Il riferimento in appendice alla funzione range
è una sorta di creazione di un elenco ricorsivo all'indice 3
.Quale funzione di intervallo fa a un elenco Python?
>>> x = range(3)
[0, 1, 2]
>>> x.append(x)
[0, 1, 2, [...]]
>>> x[3][3][3][3][0] = 5
[5, 1, 2, [...]]
considerando che, quando provo questo:
>>> x = range(3)
[0, 1, 2]
>>> x.append(range(3))
[0, 1, 2, [0, 1, 2]]
posso facilmente dedurre il motivo per il secondo caso, ma non è in grado di capire ciò che aggiungendo riferimento alla funzione di range
sta facendo alla lista allegata.
perché è questo ha taggato sia Python 2 e 3? 'range' si comporta diversamente in 2 e 3. – interjay
Gli elenchi vengono passati per riferimento in python. Ciò significa che nel primo scenario, si aggiunge il puntatore a x, non il valore di x. Poiché x ora contiene un puntatore a x, si chiama in modo ricorsivo in quel punto. –
@JacobH: dire "le liste sono passate per riferimento" fa sembrare che le liste possano comportarsi diversamente dagli altri oggetti. Tutti gli oggetti vengono passati allo stesso modo (anche se le persone discutono su quale sia la frase giusta per descriverlo). – DSM