Spread and Object.assign() create shallow copies. They copy top-level properties, but nested objects remain as references.
const orig = { a: 1, nested: { b: 2 } };
const copy = { ...orig };
copy.nested.b = 99;
console.log(orig.nested.b); // 99!
For plain objects, shallow copies work fine. For nested objects, you need deep cloning techniques.