Beachten Sie, dass ich kürzlich nach flachen und tiefen Kopien der Liste gesucht habe. (Referenz: 8.10. Kopieren - Flache Kopier- und Tiefkopiervorgänge)
Wenn Sie eine Liste kopieren und den Wert einer Liste ändern, ändert sich normalerweise auch der Wert der anderen Liste ~~ (flache Kopie) ~~
2017/9/17 Nachtrag Ich habe einen Kommentar erhalten. Vielen Dank, dlpyvim.
Ich denke nicht, dass das obige Beispiel eine flache Kopie ist. Eine flache Kopie ist copy.copy (). Der Unterschied zu copy.deepcopy () besteht darin, ob eine Referenz eingefügt oder rekursiv kopiert werden soll, wenn sich das Objekt darin befindet.
>>> l = [1, 2, 3]
>>> l2 = l
>>> l
[1, 2, 3]
>>> l2
[1, 2, 3]
>>> l[2] = 4
>>> l
[1, 2, 4]
>>> l2
[1, 2, 4]
Um dies zu vermeiden, können Sie anscheinend die Funktion deepcopy () (Deep Copy) verwenden.
>>> l = [1, 2, 3]
>>> import copy
>>> l2 = copy.deepcopy(l)
>>> l
[1, 2, 3]
>>> l2
[1, 2, 3]
>>> l[2] = 4
>>> l
[1, 2, 4]
>>> l2
[1, 2, 3]
Wenn Sie dies beim Erstellen einer leeren Liste nicht beachten, treten Probleme auf, da der Wert ohne Erlaubnis eingegeben wird.
>>> empty = [[]] * 5
>>> empty
[[], [], [], [], []]
>>> empty[0].append(1)
>>> empty
[[1], [1], [1], [1], [1]]
Wenn Sie eine solche zweidimensionale leere Liste erstellen möchten, sollten Sie die Listeneinschlussnotation verwenden.
>>> empty = [[] for x in range(5)]
>>> empty
[[], [], [], [], []]
>>> empty[0].append(1)
>>> empty
[[1], [], [], [], []]
Recommended Posts