Effizientes tiefes Kopieren von Slices
In Go umfasst das Erstellen einer tiefen Kopie eines Slices die Replikation seines Inhalts an einem separaten Speicherort. Dadurch wird sichergestellt, dass sich Änderungen an einem Slice nicht auf das andere Slice auswirken.
Ein Ansatz für Deep Copy ist die Append-Funktion:
copy := append([]T{}, orig...)
Hier wird das Original-Slice-Origin angehängt ein leeres Slice, wodurch eine neue Slice-Kopie mit einem eigenen Backing-Array erstellt wird.
Eine alternative Methode verwendet die integrierte Kopie Funktion:
cpy := make([]T, len(orig)) copy(cpy, orig)
Dieser Ansatz kopiert die Elemente direkt von orig in eine neu erstellte Slice-Datei.
Beide Lösungen kopieren effektiv die Werte im Slice. Es ist jedoch wichtig zu beachten, dass, wenn das Slice Zeiger oder Strukturen mit Zeigerfeldern enthält, diese Zeigerwerte immer noch auf die gleichen Stellen wie im Original-Slice verweisen.
Ein Benchmarking der beiden Methoden führt zu einer vergleichbaren Leistung:
BenchmarkCopy 100000 24724 ns/op BenchmarkAppend 100000 24967 ns/op
Der Assembler-Code zeigt, dass sowohl „Append“ als auch „Copy“ im Rahmen ihrer Aufgaben wahrscheinlich eine Nullfüllung des Speichers durchführen Operationen.
Letztendlich hängt die Wahl zwischen den Methoden „Anhängen“ und „Kopieren“ von individuellen Vorlieben und Leistungsaspekten ab. Bei beiden Ansätzen werden Slices jedoch effektiv tief kopiert, wodurch die Datenintegrität sichergestellt wird, wenn mit separaten Instanzen von Slice-Daten gearbeitet wird.
Das obige ist der detaillierte Inhalt vonGo Slices: Anhängen vs. Kopieren für Deep Copy – was ist effizienter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!