Was ist der Unterschied zwischen dem Kopieren eines Arrays und dem Kopieren einer Struktur in der Programmiersprache Swift?
sobes.tech KI
Antwort von AI
Die kopierte Struktur ist eine neue unabhängige Instanz. Änderungen an einer Struktur wirken sich nicht auf die andere aus.
Das Kopieren eines Arrays (Array) in Swift erfolgt standardmäßig als "Copy-on-Write" (Copy beim Schreiben). Das bedeutet, dass beim Erstellen einer neuen Referenz auf ein Array die Daten nicht dupliziert werden, bis eine der Kopien geändert wird. Bis zu diesem Zeitpunkt verweisen beide Variablen auf die gleichen Elemente im Speicher. Bei einer Änderung einer der Kopien wird eine neue unabhängige Instanz der Daten erstellt.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // Kopie der Struktur. p2 ist eine neue Instanz
p2.x = 10 // Die Änderung an p2 beeinflusst p1 nicht
print("p1: \(p1.x), \(p1.y)") // Ausgabe: p1: 1, 2
print("p2: \(p2.x), \(p2.y)") // Ausgabe: p2: 10, 2
var array1 = [1, 2, 3]
var array2 = array1 // Kopie beim Schreiben
array2[0] = 10 // Es findet eine tatsächliche Kopie der Daten statt
print("array1: \(array1)") // Ausgabe: array1: [1, 2, 3]
print("array2: \(array2)") // Ausgabe: array2: [10, 2, 3]
Der Unterschied liegt im grundlegenden Verhalten: Strukturen werden immer kopiert, wenn sie per Wert kopiert werden, während Arrays, die Strukturen sind, die "Copy-on-Write"-Optimierung implementieren, um die Speicherverwaltung bei mehreren Referenzen effizienter zu gestalten.