Quelle est la différence entre copier un tableau et copier une structure en Swift?
sobes.tech IA
Réponse de l'IA
Une structure copiée est une nouvelle instance indépendante. Les modifications apportées à une structure n'affectent pas l'autre.
La copie d'un tableau (Array) en Swift est par défaut une "copie lors de l'écriture" (copy-on-write). Cela signifie qu'en créant une nouvelle référence à un tableau, les données ne sont pas dupliquées jusqu'à ce qu'une des copies soit modifiée. Jusqu'à ce moment, les deux variables pointent vers les mêmes éléments en mémoire. Lorsqu'une des copies est modifiée, une nouvelle instance indépendante des données est créée.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // Copie de la structure. p2 est une nouvelle instance
p2.x = 10 // La modification de p2 n'affecte pas p1
print("p1: \(p1.x), \(p1.y)") // Affiche : p1: 1, 2
print("p2: \(p2.x), \(p2.y)") // Affiche : p2: 10, 2
var array1 = [1, 2, 3]
var array2 = array1 // Copie lors de l'écriture
array2[0] = 10 // La copie réelle des données a lieu
print("array1: \(array1)") // Affiche : array1: [1, 2, 3]
print("array2: \(array2)") // Affiche : array2: [10, 2, 3]
La différence réside dans le comportement fondamental : les structures sont toujours copiées par valeur, tandis que les tableaux, étant des structures, implémentent l'optimisation "copier lors de l'écriture" pour une gestion plus efficace de la mémoire lors de références multiples.