Sobes.tech
Middle

¿Cuál es la diferencia entre copiar un array y copiar una estructura en el lenguaje de programación Swift?

sobes.tech AI

Respuesta de la IA

La estructura copiada es una instancia independiente nueva. Los cambios en una estructura no afectan a la otra.

La copia de un array en Swift por defecto es una "copia en escritura" (copy-on-write). Esto significa que al crear una nueva referencia a un array, los datos no se duplican hasta que una de las copias sea modificada. Hasta ese momento, ambas variables apuntan a los mismos elementos en memoria. Cuando se modifica una de las copias, se crea una nueva instancia independiente de los datos.

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

var p1 = Point(x: 1, y: 2)
var p2 = p1 // Copia de la estructura. p2 es una nueva instancia

p2.x = 10 // La modificación en p2 no afecta a p1

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

var array1 = [1, 2, 3]
var array2 = array1 // Copia en escritura

array2[0] = 10 // Se realiza una copia real de los datos

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

La diferencia radica en el comportamiento fundamental: las estructuras siempre se copian por valor, mientras que los arrays, siendo estructuras, implementan la optimización "copiar al escribir" para gestionar la memoria de manera más eficiente en múltiples referencias.