コンテンツにスキップ

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

Topic

ITのカタカナ英語のメモ

ディープコピー deep copy

  • 値渡し(新しくメモリ上にデータを複製する)
  • 実体(データ)のコピーを行い、オブジェクトをコピーする
  • オリジナルとコピーのどちらかのオブジェクトへの変更が影響されない

C#は、変数をそのまま代入すると値渡しになる

Pythonは、copyで変数に代入すると値渡しになる

# 辞書型をディープコピーする
copied_dict = dict.copy()

VBAは、Sub Func(ByVal a As String)で値渡しを指定できる

シャローコピー shallow copy

  • 参照渡し(メモリ上の参照を代入する)
  • 実体(データ)のコピーを行わないで、オブジェクトをコピーする
  • オリジナルとコピーのどちらかのオブジェクトへの変更が反映される

C#は、refoutで渡すと値渡しになる

Pythonは、=で変数に代入すると参照渡しになる

# リストをシャローコピーする
copied_list = list[:]

# 辞書型をシャローコピーする
copied_dict = dict

# 数値をシャローコピーする
copied_num = num

# 文字列をシャローコピーする
copied_str = str

VBAは、Sub Func(ByRef a As String)で参照渡しを指定できる

Reference