Sobes.tech
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 е независимо