Junior — Middle
Каква е разликата между създаването на копие на обект по принципа на дълбока копия и повърхностна копия?
sobes.tech AI
Отговор от AI
Повърхностното копиране (shallow copy) създава нов обект, но копира само препратките към вложените обекти, а не самите вложени обекти. Това означава, че промените във вложените обекти ще се отразят и в копието.
Дълбокото копиране (deep copy) създава нов обект и рекурсивно копира всички вложени обекти, така че копието е напълно независимо от оригинала.
Пример на Kotlin:
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 е независимо