Sobes.tech
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" за по-ефективно управление на паметта при множество референции.