Source code: Lib/copy.py

Zuweisungsanweisungen in Python kopieren keine Objekte, sie erzeugen Bindungenzwischen einem Ziel und einem Objekt. Für Sammlungen, die veränderbare oder unveränderliche Elemente enthalten, wird manchmal eine Kopie benötigt, damit man eine Kopie ändern kann, ohne die andere zu ändern. Dieses Modul bietet generische flache und tiefe Kopieroperationen (unten erläutert).

Schnittstellenzusammenfassung:

copy(x)¶

Gibt eine flache Kopie von x zurück.,

copy.deepcopy(x)¶

Gibt eine tiefe Kopie von x.

exception copy.error

Ausgelöst für modulspezifische Fehler.

Der Unterschied zwischen flachem und tiefem Kopieren ist nur für Compoundobjects (Objekte, die andere Objekte enthalten, wie Listen oder Klasseninstanzen) relevant:

  • Eine flache Kopie erstellt ein neues zusammengesetztes Objekt und fügt dann (soweit möglich) Verweise auf die im Original gefundenen Objekte ein.,

  • Eine tiefe Kopie erstellt ein neues zusammengesetztes Objekt und fügt dann rekursiv die im Original gefundenen Objekte ein.

Bei Deep Copy-Operationen, die bei shallowcopy-Operationen nicht vorhanden sind, treten häufig zwei Probleme auf:

  • Rekursive Objekte (zusammengesetzte Objekte, die direkt oder indirekt enthalten sind, beziehen sich auf sich selbst) können eine rekursive Schleife verursachen.

  • Da deep copy alles kopiert, kann es zu viel kopieren, z. B. Daten, die zwischen Kopien geteilt werden sollen.,

Die Funktion deepcopy() vermeidet diese Probleme durch:

  • Beibehaltung einer memo Liste von Objekten, die bereits während des Currentcopying-Durchlaufs kopiert wurden; und

  • benutzerdefinierte Klassen überschreiben den Kopiervorgang oder die Menge der kopierten Komponenten.

Dieses Modul kopiert keine Typen wie module, methods, stack trace,stack frame, file, socket, window, array oder ähnliche Typen., Es“ kopiert “ Funktionen und Klassen (flach und tief), indem es das ursprüngliche Objekt unverändert zurückgibt; Dies ist kompatibel mit der Art und Weise, wie diese vom pickle Modul behandelt werden.

Klassen können dieselben Schnittstellen verwenden, um das Kopieren zu steuern, das sie zum Steuern von Pickling verwenden. Informationen zu diesen Methoden finden Sie in der Beschreibung des Moduls pickle. Tatsächlich verwendet das Modul copy die registeredpickle-Funktionen des Moduls copyreg.,

Damit eine Klasse ihre eigene Kopimplementierung definieren kann, kann sie definierenspezielle Methoden __copy__() und __deepcopy__(). Ersteres wird aufgerufen, um die flache Kopieroperation zu implementieren; Es werden keine zusätzlichen Argumente übergeben.Letzteres wird aufgerufen, um die deep copy Operation zu implementieren; es wird oneargument übergeben, das memo Wörterbuch., Wenn die Implementierung __deepcopy__() eine tiefe Kopie einer Komponente erstellen muss, sollte sie die Funktion deepcopy() aufrufenmit der Komponente als erstes Argument und dem Memo-Wörterbuch als zweites Argument.

Siehe auch

Modul pickle

Diskussion der speziellen Methoden zur Unterstützung des Objektstatus Abruf undstoration.