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.