Sobes.tech
Middle

Swift dasturlash tilida massivni nusxalash va tuzilmani nusxalash o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

Nusxa olingan tuzilma yangi mustaqil nusxa hisoblanadi. Bir tuzilmada o'zgarishlar boshqasiga ta'sir qilmaydi.

Swiftda Array massivining nusxalash jarayoni odatda "yazish paytida nusxalash" (copy-on-write) tarzida amalga oshiriladi. Bu shuni anglatadiki, yangi massiv referensiyasini yaratishda, ma'lumotlar takrorlanmaydi, faqat nusxa o'zgartirilgunga qadar. Bu vaqtgacha, ikkala o'zgaruvchi ham xotirada bir xil elementlarga murojaat qiladi. Nusxa o'zgartirilganda, yangi mustaqil ma'lumot nusxasi yaratiladi.

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

var p1 = Point(x: 1, y: 2)
var p2 = p1 // Tuzilmaning nusxasi. p2 yangi nusxa

p2.x = 10 // p2 o'zgarishi p1 ga ta'sir qilmaydi

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

var array1 = [1, 2, 3]
var array2 = array1 // Yozish paytida nusxalash

array2[0] = 10 // Ma'lumotlarning haqiqiy nusxasi amalga oshiriladi

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

Farq asosiy xulq-atvorda yotadi: tuzilmalar har doim qiymat bo'yicha nusxalanadi, arraylar esa, tuzilma bo'lib, "nusxa yozish paytida" optimallashtirishni amalga oshiradi va ko'p referensiyalar bilan xotira boshqaruvini yanada samarali qiladi.