Junior — Middle
136
Как отличить глубокое копирование от поверхностного, и в чем между ними основные различия?
Сұралған компаниялар
Передовые Платежные Решения
AI-дан жауап
sobes.tech AI
Поверхностное копирование (shallow copy) создаёт новый объект, но поля этого объекта ссылаются на те же вложенные объекты, что и оригинал. Глубокое копирование (deep copy) создаёт новый объект и рекурсивно копирует все вложенные объекты, так что копия полностью независима.
Основные различия:
- При поверхностном копировании изменения в вложенных объектах отражаются в обеих копиях.
- При глубоком копировании вложенные объекты тоже копируются, изменения в копии не влияют на оригинал.
Пример в Java:
class Person implements Cloneable {
String name;
Address address; // вложенный объект
public Person cloneShallow() throws CloneNotSupportedException {
return (Person) super.clone();
}
public Person cloneDeep() {
Person copy = new Person();
copy.name = this.name;
copy.address = new Address(this.address.street);
return copy;
}
}
class Address {
String street;
Address(String street) { this.street = street; }
}
Здесь cloneShallow скопирует ссылку на address, а cloneDeep создаст новый объект Address.