PassFront
  1. PassFront
  2. База знаний
  3. Объекты и прототипы

В чем разница между глубоким (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-копии затрагивает оригинал — главная ловушка.

Другие вопросы раздела