シャローコピーとディープコピーの違い

調べ物をしていてタイトルの2つが出てきたので調べてみました。

オブジェクト指向においてよく使われる用語だそうです。

シャローコピー

シャローコピーとはshallow(浅い)の文字が示すように浅いコピーです。

オブジェクトを複製する際に、コピー元のオブジェクトとコピー先のオブジェクトがメモリ上の同じデータ(インスタンス変数)を参照しています。

コピー元のオブジェクトに対してインスタンス変数に変更が加えられるとコピー先のオブジェクトが参照しているデータは同じ物なので、

コピー先のオブジェクトから見たインスタンス変数も変更されます。シャローコピーは、参照のコピーのみを行うそうです。

ディープコピー

こちらはdeep(深い)の文字が示すように深いコピーです。

オブジェクトのみのコピーではなく、オブジェクトとメモリ上のデータ(インスタンス変数)の両方をコピーします。

二つのオブジェクトが参照しているデータは別のものなので、一方のオブジェクトのインスタンス変数に変更を加えても、

もう一方のオブジェクトは影響を受けません。

それぞれポインタをコピーするかポインタの参照先をコピーするかという違いがあるのです。