В чем разница между глубоким (deep copy) и поверхностным (shallow copy) копированием?
Объекты и прототипы
Поверхностное копирование (shallow copy) дублирует только верхний уровень объекта, а глубокое (deep copy) — все вложенные уровни. Разница проявляется на вложенных объектах.
Поверхностная копия
Копируются значения верхнего уровня; вложенные объекты остаются общими ссылками.
const original = { name: 'Ann', address: { city: 'Москва' } };
const shallow = { ...original };
shallow.name = 'Bob'; // не влияет на original
shallow.address.city = 'Питер'; // влияет — общий вложенный объект!
original.address.city; // 'Питер'Способы: { ...obj }, Object.assign({}, obj), arr.slice().
Глубокая копия
Рекурсивно копируются все уровни — полная независимость.
const deep = structuredClone(original);
deep.address.city = 'Казань';
original.address.city; // не изменилосьСпособы: structuredClone, JSON.parse(JSON.stringify()) (с ограничениями), lodash.cloneDeep.
Как выбрать
- Плоский объект или менять только верхний уровень → поверхностная (быстрее).
- Есть вложенность и её будут менять → глубокая.
Коротко для собеседования
Shallow copy копирует верхний уровень, вложенные объекты остаются общими ссылками ({...obj}). Deep copy копирует всё дерево (structuredClone). Мутация вложенности в shallow-копии затрагивает оригинал — главная ловушка.