Middle
Каква е разликата между копирането на масив и копирането на структура в езика за програмиране Swift?
sobes.tech AI
Отговор от AI
Копираната структура е нов независим екземпляр. Промените в една структура не влияят на другата.
Копирането на масив (Array) в Swift по подразбиране е с "copy-on-write" (копиране при писане). Това означава, че при създаване на нова референция към масив, данните не се дублират, докато една от копията не бъде променена. До този момент и двете променливи сочат към едни и същи елементи в паметта. При промяна на една от копията, се създава нов независим екземпляр от данните.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 1, y: 2)
var p2 = p1 // Копиране на структурата. p2 е нов екземпляр
p2.x = 10 // Промяната в p2 не влияе на p1
print("p1: \(p1.x), \(p1.y)") // Изход: p1: 1, 2
print("p2: \(p2.x), \(p2.y)") // Изход: p2: 10, 2
var array1 = [1, 2, 3]
var array2 = array1 // Копиране при писане
array2[0] = 10 // Реално копиране на данните
print("array1: \(array1)") // Изход: array1: [1, 2, 3]
print("array2: \(array2)") // Изход: array2: [10, 2, 3]
Разликата се крие в фундаменталното поведение: структурите винаги се копират по стойност, докато масивите, като структури, реализират оптимизацията "copy-on-write" за по-ефективно управление на паметта при множество референции.