(Web関連用語)
https://developer.mozilla.org/ja/docs/Glossary/Shallow_copy
https://developer.mozilla.org/ja/docs/Glossary/Deep_copy
シャローコピーは名前の通り浅いコピーで、コピーがコピー元のオブジェクトとプロパティにおいて同じ参照を共有する(同じ基礎値を指す)コピーのことを指す。その結果、コピー元とコピー先のどちらかを変更すると、もう一方のオブジェクトも変更される可能性がある。そのため、意図せずにコピー元やコピー先に予期しない変更が発生してしまう可能性がある。
ディープコピーはシャローコピーとは逆の深いコピーで、コピー先のオブジェクトのプロパティがコピー元のオブジェクトのプロパティと同一の参照(同じ値を指す)を共有しないコピーのこと。結果として、コピー元かコピー先のどちらかを変更しても、そのほかのオブジェクトにも変更を及ぼしていないことを保証できる。すなわち、コピー元かコピー先に意図せずに予期しない変更が加えられることはない。
// シャローコピーの例
let arr = [{x : 2}]; // オブジェクト参照をもつ配列
let arr2 = [].concat(arr); // 要素をコピー
arr2[0].x = 123; // 変数arr2から見える要素の参照先オブジェクトを変更。
arr[0].x // 変数arrから変更が見える(shallowだから)
>> 123