Sobes.tech
Middle

Kāda ir atšķirība starp masīva kopēšanu un struktūras kopēšanu Swift programmēšanas valodā?

sobes.tech AI

Atbilde no AI

Kopētā struktūra ir jauna neatkarīga piemērs. Izmaiņas vienā struktūrā neietekmē otru.

Swift valodā masīva (Array) kopēšana pēc noklusējuma notiek kā "copy-on-write" (kopēšana rakstīšanas laikā). Tas nozīmē, ka, izveidojot jaunu atsauci uz masīvu, dati netiek dublēti, kamēr viena no kopijām netiek mainīta. Līdz tam brīdim abas mainīgās norāda uz tās pašas atmiņas elementiem. Kad viena no kopijām tiek mainīta, tiek izveidots jauns neatkarīgs datu piemērs.

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

var p1 = Point(x: 1, y: 2)
var p2 = p1 // Struktūras kopija. p2 ir jauns piemērs

p2.x = 10 // Izmaiņas p2 neietekmē p1

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

var array1 = [1, 2, 3]
var array2 = array1 // Rakstīšanas laikā kopēšana

array2[0] = 10 // Notiek faktiska datu kopēšana

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

Atšķirība ir pamatā esošajā uzvedībā: struktūras vienmēr tiek kopētas pēc vērtības, bet masīvi, būdami struktūras, realizē "copy-on-write" optimizāciju, kas ļauj efektīvāk pārvaldīt atmiņu daudzskaitlī atsauču gadījumā.