Pythonの代入ステートメントはオブジェクトをコピーせず、ターゲットとオブジェクト間のバインディングを作成します。
そのため、参照するオブジェクトとのdict2 = dict1
間の別のバインディングが発生dict2
しますdict1
。
辞書をコピーしたい場合は、を使用できますcopy module
。コピーモジュールには2つのインターフェイスがあります。
copy.copy(x)
Return a shallow copy of x.
copy.deepcopy(x)
Return a deep copy of x.
シャローコピーとディープコピーの違いは、複合オブジェクト(リストやクラスインスタンスなどの他のオブジェクトを含むオブジェクト)にのみ関係します。
浅いコピーオリジナルで見つかったオブジェクトにその中に(可能な限り)を挿入参照を新しい複合オブジェクトを作成し、。
ディープコピーは、新しい複合オブジェクトを作成し、その後、再帰的に、オブジェクトのそれへの挿入のコピーはオリジナルで見つかりました。
たとえば、python 2.7.9の場合:
>>> import copy
>>> a = [1,2,3,4,['a', 'b']]
>>> b = a
>>> c = copy.copy(a)
>>> d = copy.deepcopy(a)
>>> a.append(5)
>>> a[4].append('c')
結果は次のとおりです。
>>> a
[1, 2, 3, 4, ['a', 'b', 'c'], 5]
>>> b
[1, 2, 3, 4, ['a', 'b', 'c'], 5]
>>> c
[1, 2, 3, 4, ['a', 'b', 'c']]
>>> d
[1, 2, 3, 4, ['a', 'b']]
dict1
、dict2
指し示すことができます。