Ich glaube, ich beginne Python zu verstehen, aber ich habe immer noch Probleme mit einer grundlegenden Frage. Wann muss copy.copy
verwendet werden?
Ok macht Sinn. Aber unter welchen Umständen bildet das Sprechen von b=a
eine Art "Verbindung" zwischen a und b, so dass das Modifizieren von a dann b modifizieren würde? Das ist, was ich nicht über copy.copy
- jedes Mal, wenn Sie eine Variable zu einem anderen mit dem Gleichheitszeichen zuweisen kopieren einfach den Wert?
Grundsätzlich b = a
points b
auf wo auch immer a
Punkte und nichts anderes.
Was Sie fragen, ist veränderbare Typen. Zahlen, Strings, Tupel, frozensets, booleans, None
sind unveränderlich. Listen, Wörterbücher, Sets, Bytearrays sind veränderbar.
Wenn ich einen veränderlichen Typ wie list
:
Sie werden beide immer noch auf den gleichen Gegenstand zeigen.
Ich werde auch deinen ursprünglichen Code kommentieren:
%Vor% Sie können jederzeit sehen, wohin etwas im Speicher zeigt, indem Sie id(something)
ausführen.
Sie verwenden copy
, wenn Sie eine Kopie einer Struktur erstellen möchten. Es macht jedoch immer noch keine Kopie von etwas, das interniert . Dies beinhaltet ganze Zahlen kleiner als 256
, True
, False
, None
, kurze Strings wie a
. Grundsätzlich sollten Sie niemals verwenden , wenn Sie nicht sicher sind, dass Sie nicht durch ein Praktikum gestört werden.
Betrachten Sie ein weiteres Beispiel, das selbst bei veränderlichen Typen zeigt, dass das Zeigen einer Variablen auf etwas Neues die alte Variable immer noch nicht ändert:
%Vor% Wenn Sie eine Liste aufteilen (wenn Sie :
verwenden), wird eine Kopie erstellt.
Die Aufgabe wird niemals kopiert. Es verbindet nur das Objekt a
, das auf das Beispiel verweist, mit b
. a
und b
verweisen auf dasselbe Objekt, bis Sie die Verknüpfung von eins ändern.
Es ist nützlich, "Variable" als einen Begriff zu verwenden, es ist nur eine Bezeichnung, die Sie einem Objekt zuweisen, ein Handle, mit dem Sie zum Objekt gelangen können, nicht mehr.
copy.copy
ändert das überhaupt nicht.
Wenn Sie Änderungen auch für Zahlen oder Strings propagieren möchten - hier ist die Unveränderlichkeitshow - müssen Sie die Zahlen und Strings in ein anderes Objekt einbinden und es a
und b
zuordnen.
Wenn Sie umgekehrt gehen möchten, müssen Sie das Modul copy
verwenden, aber lesen Sie die Dokumentation. Aber Sie müssen in Bezug auf Objekte nicht Variablen denken.
Tags und Links python