Es ist eine ziemlich dumme Frage, aber ich bin wirklich verwirrt. Bitte haben einen meinen Code aussehen:Slice verschachtelte Listen
>>> my_list = [1, 2, 3]
>>> my_list_new = my_list[:]
>>> my_list_new[0] = 100
>>> my_list_new
[100, 2, 3]
>>> my_list
[1, 2, 3]
So funktioniert es wie es sollte. Ich kopierte my_list
. Als ich die my_list_new
änderte - änderte nur eine Liste.
Jetzt schauen hier:
>>> my_list2 = [[1, 2, 3], [4, 5, 6]]
>>> my_list_new2 = my_list2[:]
>>> my_list_new2[0][0] = 100
>>> my_list_new2
[[100, 2, 3], [4, 5, 6]]
>>> my_list2
[[100, 2, 3], [4, 5, 6]]
Wie man sehen kann ich geändert my_list_new2
, aber beide Listen geändert. Ist es normales Python-Verhalten für verschachtelte Listen? Wie man es vermeidet?
Es gibt zwei gute Antworten unten. Um mehr zu erfahren, klicken Sie hier: https://docs.python.org/2/library/copy.html#module-copy Sie müssen eine 'deepcopy' durchführen, wenn die Liste verschachtelt ist, ansonsten nur die Verweise auf die verschachtelte Liste kopiert. –
Offenbar müssen Sie die Slice-Syntax verwenden, um zu vermeiden, dass nur die Referenz kopiert wird. Ich bin also nicht sicher, warum Sie überrascht sind, dass Listen, die ohne diese Syntax kopiert wurden - nämlich die inneren - nur kopiert wurden durch Bezugnahme. – TigerhawkT3