Beim Lesen der Dokumentation für dict.copy()heißt es, dass eine flache Kopie des Wörterbuchs erstellt wird. Gleiches gilt für das Buch, dem ich folge (Beazleys Python-Referenz), in dem es heißt:
Die Methode m.copy () erstellt eine flache Kopie der in einem Zuordnungsobjekt enthaltenen Elemente und platziert sie in einem neuen Zuordnungsobjekt.
Bedenken Sie:
>>> original = dict(a=1, b=2)
>>> new = original.copy()
>>> new.update({'c': 3})
>>> original
{'a': 1, 'b': 2}
>>> new
{'a': 1, 'c': 3, 'b': 2}
Daher nahm ich an, dass dies den Wert von original(und 'c': 3 hinzufügen) aktualisieren würde, auch da ich eine flache Kopie machte. Zum Beispiel, wenn Sie es für eine Liste tun:
>>> original = [1, 2, 3]
>>> new = original
>>> new.append(4)
>>> new, original
([1, 2, 3, 4], [1, 2, 3, 4])
Dies funktioniert wie erwartet.
Da beide flache Kopien sind, warum dict.copy()funktioniert das nicht so, wie ich es erwartet habe? Oder ist mein Verständnis von flachem und tiefem Kopieren fehlerhaft?
![Abbildung von 'a = b': 'a' und 'b' zeigen beide auf '{1: L}', 'L' zeigt auf '[1, 2, 3]'.](https://i.stack.imgur.com/4AQC6.png)
![Abbildung von 'b = a.copy ()': 'a' zeigt auf '{1: L}', 'b' zeigt auf '{1: M}', 'L' und 'M' zeigen beide auf '[ 1, 2, 3] '.](https://i.stack.imgur.com/Vtk4m.png)
![Abbildung von 'b = copy.deepcopy (a)': 'a' zeigt auf '{1: L}', 'L' zeigt auf '[1, 2, 3]'; 'b' zeigt auf '{1: M}', 'M' zeigt auf eine andere Instanz von '[1, 2, 3]'.](https://i.stack.imgur.com/BO4qO.png)