Sehr einfaches Python, ich erstelle nur ein neues Listenobjekt, indem ich die alte Liste kopiere. Mit der Methode .copy() dachte ich, dass es ein neues Objekt in Python basierend auf dem offiziellen Dokument erstellen sollte: https://docs.python.org/3.6/library/stdtypes.html?highlight=list#list Wie kommt es, nachdem ich die Elemente im neuen Objekt aktualisiert habe, wurden auch die Elemente im alten Listenobjekt geändert.Warum ist das alte Objekt auch geändert worden, wenn ich ein neues Objekt nach list.copy() aktualisiert habe
old = [[1, 1, 1],
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]]
print(old)
new = old.copy()
for i in range(len(new)):
for j in range(len(new[0])):
new[i][j] = 0
print(old)
print(new)
Wie kommt der Ausgang ist, wo ich den alten Wert erwarten sollte nicht geändert werden:
[[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
'list.copy' erstellt eine flache Kopie. Wenn also die äußere Liste Listen enthält, bezieht sich die neue Liste immer noch auf die alten inneren Listen. Wenn Sie 'deepcopy' nicht importieren wollen, können Sie dies tun, um Kopien der inneren Listen zu erstellen: 'new = [u [:] für u in old]'. –