Junior — Middle
Объектінің терең көшірмесін жасау мен беткі көшірме жасаудың айырмашылығы неде?
sobes.tech AI
AI-дан жауап
Жартылай көшірме (shallow copy) жаңа объект құрады, бірақ тек ішкі объектілердің сілтемелерін көшіріп алады, ал ішкі объектілерді емес. Бұл өзгерістер ішкі объектілерде болған жағдайда көшірмеге де әсер етеді.
Терең көшірме (deep copy) жаңа объект құрады және барлық ішкі объектілерді рекурсивті түрде көшіріп алады, яғни көшірме түбегейлі тәуелсіз болады.
Котлиндегі мысал:
data class Person(var name: String, var address: Address)
data class Address(var city: String)
val original = Person("Ivan", Address("Moscow"))
val shallowCopy = original.copy() // сол Address объектісімен көшірме
val deepCopy = original.copy(address = Address(original.address.city)) // жаңа Address құру
shallowCopy.address.city = "Saint Petersburg"
println(original.address.city) // "Saint Petersburg" деп шығады — түпнұсқа да өзгерді
deepCopy.address.city = "Novosibirsk"
println(original.address.city) // әлі де "Saint Petersburg" — deepCopy тәуелсіз