シャローコピー 【shallow copy】 浅いコピー
一般に、単一の値であるプリミティブ型の変数などの複製は代入文などで行なうことができるが、配列など複数の値で構成されるデータ構造の複製は、その参照を複製するシャローコピーと実体を複製する「ディープコピー」(deep copy)に分かれる。
例えば、JavaScriptで「var x={a:1};」というオブジェクトがある場合、変数と同じように「y=x;」のような代入文を実行すると、yにはxの参照が代入され、xと同じメモリ領域を指し示すようになる。xとyは同じ実体を表すため、複製後に「y.a=2;」のような操作を行なうと、x.aも同じ値(2)に変更される。このような複製方法をシャローコピーという。
一方、「var y={a:0};y.a=x.a;」のように同じ構造を持つ実体を作成して対応する値を代入すると、yはxと同じ構造と値を持つ別のオブジェクトとなる。このような複製方式をディープコピーと呼び、複製先で値を変更しても複製元は影響を受けない。ちなみに、JavaScriptには言語レベルでディープコピーを行なう機能は用意されていない。
(2022.2.8更新)