O spread também cria uma shallow copy:
In JavaScript, all standard built-in object-copy operations (spread syntax, Array.prototype.concat(), Array.prototype.slice(), Array.from(), Object.assign(), and Object.create()) create shallow copies rather than deep copies.
https://developer.mozilla.org/en-US/docs/Glossary/Shallow_copy
Para realmente fazer uma deep copy é possível utilizar a função structuredClone
, nativa do JS, ou uma biblioteca externa como o lodash.
https://developer.mozilla.org/en-US/docs/Web/API/structuredClone
https://lodash.com/docs/4.17.15#cloneDeep