Ich bin nicht in der Lage herauszufinden, was hier passiert. Der Verweis auf die Funktion range
wird angehängt, um eine rekursive Liste mit dem Index 3
zu erstellen.Welche Bereichsfunktion hat eine Python-Liste?
>>> x = range(3)
[0, 1, 2]
>>> x.append(x)
[0, 1, 2, [...]]
>>> x[3][3][3][3][0] = 5
[5, 1, 2, [...]]
Während, wenn ich versuche, dies:
>>> x = range(3)
[0, 1, 2]
>>> x.append(range(3))
[0, 1, 2, [0, 1, 2]]
ich den Grund für den zweiten Fall leicht ableiten kann, aber nicht in der Lage zu verstehen, was Bezug auf range
Funktion Anhängen an die Liste angehängt tut.
Warum ist dies beide Python 2 und 3 markiert? 'Bereich' verhält sich in 2 und 3 anders. – interjay
Listen werden als Referenz in Python übergeben. Dies bedeutet, dass Sie im ersten Szenario den Zeiger an x anfügen, nicht den Wert von x. Da x jetzt einen Zeiger auf x enthält, ruft es sich an diesem Punkt rekursiv auf. –
@JacobH: Wenn man sagt "Listen werden per Referenz übergeben", scheint es, als würden sich Listen anders verhalten als andere Objekte. Alle Objekte werden auf die gleiche Weise übergeben (obwohl Leute darüber streiten, was die richtige Formulierung ist). – DSM