ディープコピー 【deep copy】 深いコピー
一般に、単一の値であるプリミティブ型の変数などの複製は代入文などで行なうことができるが、配列など複数の値で構成されるデータ構造の複製は、実体を複製するディープコピーと、参照のみを複製する「シャローコピー」(shallow copy)に分かれる。
例えば、JavaScriptで「var x={a:1};」というオブジェクトがある場合、同じ構造の「var y={a:0};」を作成し、「y.a=x.a;」のように同じ名前の要素を複製すると、yはxと構造も内部の値も同一の新しいオブジェクトとなる。このような複製方法がディープコピーで、複製先の値を変更しても複製元は影響を受けない。
一方、「var y=x;」のように変数と同じ代入文を実行すると、yにはxの参照のみが複製され、xと同じ実体(実際にデータ構造が配置されたメモリ上の領域)を指し示すようになる。このような複製方法をシャローコピーという。y.aの値はx.aと同一になるが、両者は同じ領域に別の名前でアクセスしているだけで、「y.a=2;」のように複製先の値を変更するとx.aも同じ値(2)に変更される。
(2022.2.8更新)