シャローコピー(浅いコピー、Shallow Copy)とディープコピー(深いコピー、Deep Copy)の違い

プログラミング
スポンサーリンク

C言語上がりのプログラマならJavaでシャローコピー(浅いコピー、Shallow Copy)、ディープコピー(深いコピー、Deep Copy)と言われて、説明を受ければ納得できると思います。

 

一方、初めてJavaでプログラムを覚える人にとっては、シャローコピーとディープコピーはなかなか分かりにく概念です。

 

スポンサーリンク

シャローコピー(浅いコピー、Shallow Copy)

シャローコピーとは、文字通り浅いコピーです。

 

参照はコピーされますが、実体はコピーされません。

実体が変更されるとコピー元から見てもコピー先から見ても内容が変更されています。

JavaのObject#clone()はシャローコピーです。

 

 

ディープコピー(深いコピー、Deep Copy)

ディープコピーは深いコピーです。

 

ディープコピーでは実体もコピーされます。

 

 

Javaでは、ディープコピーはclone()メソッドをオーバーライドして自分で実装しないといけません。

 

 

C++のSTL(Standard Template Library、標準テンプレートライブラリ)でもシャローコピー、ディープコピーがある

ポインタを持たない言語であるJavaに比べるとポインタを持つ言語であるC++ではシャローコピーとディープコピーの概念は比較的に容易です。

 

 

基本、ポインター変数をコピーするとシャローコピー、ポインターなし変数をコピーするとディープコピーと覚えましょう。

 

プログラミングの無料レッスン体験

 

約8,000名の受講生と80社以上の導入実績のあるプログラミングやWebデザインのオンラインマンツーマンレッスンCodecamp

<Codecampの特徴>

1 現役エンジニアによる指導

2オンラインでのマンツーマン形式の講義

3大手企業にも導入されている実践的なカリキュラム

↓無料体験レッスン実施中です。

プログラミングのオンラインスクールCodeCamp

 

 

 

コメント

  1. […] 実体が変更されるとコピー元から見てもコピー先から見ても内容が変更されています。 C言語上がりのプログラマならJavaでシャローコピー(浅いコピー、Shallow Copy)、ディープコピー(深いコピー、Deep Copy)と言われても納得できると思います。 初めてJavaでプログラムを覚えるとシャローコピーとディープコピーはなかなか分かりにく概念です。 [紹介元] シャローコピー(浅いコピー、Shallow Copy)とディープコピー(深いコピー、Deep… […]