Sobes.tech
Junior — Middle

Qual é a diferença entre criar uma cópia de um objeto por princípio de cópia profunda e uma cópia superficial?

sobes.tech IA

Resposta da IA

A cópia superficial cria um novo objeto, mas apenas copia as referências para os objetos aninhados, não os próprios objetos. Isto significa que as alterações nos objetos aninhados também se refletirão na cópia.

A cópia profunda cria um novo objeto e copia recursivamente todos os objetos aninhados, ou seja, a cópia é totalmente independente do original.

Exemplo em 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() // cópia com o mesmo objeto Address
val deepCopy = original.copy(address = Address(original.address.city)) // criamos um novo Address

shallowCopy.address.city = "Saint Petersburg"
println(original.address.city) // irá mostrar "Saint Petersburg" — o original também mudou

deepCopy.address.city = "Novosibirsk"
println(original.address.city) // continuará a ser "Saint Petersburg" — deepCopy é independente