В чем разница между deepCopy и shallowCopy

«В чем разница между deepCopy и shallowCopy» — вопрос из категории ООП, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Shallow Copy создает новый объект, но копирует только ссылки на вложенные объекты, а не сами объекты. Изменения вложенных объектов в копии повлияют на оригинал.

Deep Copy создает полностью независимую копию, включая все вложенные объекты. Изменения в копии не затрагивают оригинал.

Пример (Kotlin):

data class Person(var name: String, var friend: Person?)

// Shallow copy (использует copy() у data class)
val original = Person("Alice", Person("Bob", null))
val shallowCopy = original.copy()  
shallowCopy.friend?.name = "Charlie"  // Изменится и в original!

// Deep copy (нужна ручная реализация)
val deepCopy = original.copy(friend = original.friend?.copy())  
deepCopy.friend?.name = "Dave"  // Оригинал не изменится