Lassen Sie uns sagen, dass ich eine 2D-Python-Liste mit allen 0en initialisiert werden soll, ich etwas tun würde:Initialisierung von 2D-Listen in Python: Wie werden tiefe Kopien jeder Zeile erstellt?
test = [[0.0] * 10] * 10
Dann beginne ich Werte in der ersten Liste zu modifizieren ...
test[0][0] = 1.0
Aber das betrifft das erste Element aller Listen aus irgendeinem Grund:
print test
[[1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]
Was ist damit los? Warum macht es eine tiefe Kopie der inneren Liste, aber eine flache Kopie der äußeren Liste?
Wie seltsam! Ich verstehe nicht * warum * es würde tiefe Kopien der inneren Liste machen ('[0.0] * 10'), aber flache Kopien der äußeren Liste (' ([0.0] * 10) * 10') –
' 0.0] * 10 'erzeugt '[0.0, 0.0, ...]'. Ganzzahlen und Gleitkommazahlen sind in Python unveränderlich, obwohl alle Elemente dieser Liste auf das gleiche Objekt 0.0 verweisen, aber das Ändern von eins wirkt sich nicht auf andere Objekte aus, da sie unveränderlich sind. Auf der anderen Seite sind Listen veränderbar, das Ändern einer Kopie wirkt sich auch auf alle anderen Referenzen aus. –