Sobes.tech
Middle

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.