Sobes.tech
Middle

Qual è la differenza tra copiare un array e copiare una struttura nel linguaggio di programmazione Swift?

sobes.tech AI

Risposta dell'AI

La struttura copiata è una nuova istanza indipendente. Le modifiche a una struttura non influenzano l'altra.

La copia di un array in Swift di default è una "copia al momento della scrittura" (copy-on-write). Ciò significa che, creando un nuovo riferimento a un array, i dati non vengono duplicati finché una delle copie non viene modificata. Fino a quel momento, entrambe le variabili puntano agli stessi elementi in memoria. Quando una delle copie viene modificata, viene creata una nuova istanza indipendente dei dati.

struct Point {
    var x: Int
    var y: Int
}

var p1 = Point(x: 1, y: 2)
var p2 = p1 // Copia della struttura. p2 è una nuova istanza

p2.x = 10 // La modifica di p2 non influisce su p1

print("p1: \(p1.x), \(p1.y)") // Output: p1: 1, 2
print("p2: \(p2.x), \(p2.y)") // Output: p2: 10, 2

var array1 = [1, 2, 3]
var array2 = array1 // Copia al momento della scrittura

array2[0] = 10 // Si verifica una copia effettiva dei dati

print("array1: \(array1)") // Output: array1: [1, 2, 3]
print("array2: \(array2)") // Output: array2: [10, 2, 3]

La differenza risiede nel comportamento fondamentale: le strutture vengono sempre copiate per valore, mentre gli array, essendo strutture, implementano l'ottimizzazione "copy-on-write" per una gestione più efficiente della memoria in presenza di molteplici riferimenti.