ユーザ用ツール

サイト用ツール


it技術:dotnet:シャローコピーとディープコピー

シャローコピーとディープコピー

シャローコピー (Shallow Copy) と、ディープコピー (Deep Copy) という言葉を今頃、知りました。仕組みは知っていたけれど・・・

シャローコピー 

コレクション系クラス(ArryaListなど)をコピーしようとして

Dim test1 As New ArrayList
Dim test2 As New ArrayList
test1.Add("A")
test1.Add("B")
test2 = test1    'シャローコピー
test1.Add("C")
test2.Remove("A")

とした場合、追加していない test2 にも、“C” が追加され、削除していない test1 では、“A”が削除されます。

これは、参照先を示すアドレスがコピーされるだけ、コピー元もコピー先も結局は同じものを指し示していることを意味します。
これを、シャローコピー (Shallow Copy、簡易コピー、浅いコピーなど) と言います。

ディープコピー

逆に、中身そのものをコピーする(参照先のインスタンスをも複製する)場合をディープコピー (Deep Copy、深いコピーなど) と言います。

Dim test1 As New ArrayList
Dim test2 As ArrayList = Nothing
test1.Add("A")
test1.Add("B")
test2 = New ArrayList(test1) 'ディープコピー
test1.Add("C")
test2.Remove("A")

とした場合、test1 と test2 は、中身そのものがコピーされるため、それぞれは影響を受けません。test1 のみに“C”が追加され、test2 のみに “A”が削除されます。

it技術/dotnet/シャローコピーとディープコピー.txt · 最終更新: 2017/03/26 11:45 by yajuadmin