Middle
Swiftda massiv va tuzilmani nusxalash o'rtasidagi farq nima?
sobes.tech AI
AIdan javob
Swift'da massivni nusxalash yangi va mustaqil nusxani yaratadi. Asl massivdagi o'zgarishlar nusxani ta'sir qilmaydi va aksincha.
Swift'da tuzilmani nusxalash ham uning barcha xususiyatlarining yangi nusxasini yaratadi. Agar tuzilma ichida ichki referens turlar (masalan, sinflar) bo'lsa, bu ob'ektga bo'lgan referens nusxalanadi, ob'ekt o'zi emas. Nusxalangan tuzilma ichidagi referens turdagi o'zgarishlar aslida aks etadi.
struct Point {
var x: Int
var y: Int
}
// Tuzilmani nusxalash
var point1 = Point(x: 10, y: 20)
var point2 = point1 // Tuzilmani nusxalash
point2.x = 30
print(point1.x) // 10 chiqaradi (point1 o'zgarmadi)
class Container {
var value: Int
init(value: Int) {
self.value = value
}
}
struct HasReference {
var data: Container
}
// Referens turdagi tuzilmani nusxalash
var ref1 = HasReference(data: Container(value: 100))
var ref2 = ref1 // Tuzilmani nusxalash
ref2.data.value = 200 // Tuzilma ichidagi referens turini o'zgartirish
print(ref1.data.value) // 200 chiqaradi (o'zgarish aks etdi)
// Massivni nusxalash (qiymat bo'yicha)
var array1 = [1, 2, 3]
var array2 = array1 // Massivni nusxalash
array2[0] = 10
print(array1[0]) // 1 chiqaradi (array2'dagi o'zgarish array1'ga ta'sir qilmaydi)
// Referens turlarini o'z ichiga olgan massivni nusxalash
var containers1 = [Container(value: 1), Container(value: 2)]
var containers2 = containers1 // Massivni nusxalash (referenslar nusxalanadi)
containers2[0].value = 10 // array2'dagi referens orqali o'zgartirish
print(containers1[0].value) // 10 chiqaradi (o'zgarish array1'ga ta'sir qildi)
| Xususiyat | Massiv | Tuzilma (referens xususiyatlari bo'lmagan) | Tuzilma (referens xususiyatlari bilan) |
|---|---|---|---|
| Nusxalash prinsipi | Qiymat bo'yicha (silliq nusxa) | Qiymat bo'yicha | Qiymat bo'yicha (referenslar nusxalanadi) |
| Nusxalarning mustaqilligi | Mazmun bo'yicha mustaqil | Barcha xususiyatlar bo'yicha mustaqil | Xususiyat-qiymat bo'yicha mustaqil, referens xususiyatlariga bog'liq |
| Chuqur nusxa qilish | Aniq amalga oshirilishi kerak | Tabiiy ravishda | Referens xususiyatlari uchun aniq amalga oshirilishi kerak |