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