のドキュメントを読んでいる間dict.copy()、辞書の浅いコピーを作成すると書かれています。私がフォローしている本(BeazleyのPythonリファレンス)についても同じことが言えます。
m.copy()メソッドは、マッピングオブジェクトに含まれる項目の浅いコピーを作成し、それらを新しいマッピングオブジェクトに配置します。
このことを考慮:
>>> original = dict(a=1, b=2)
>>> new = original.copy()
>>> new.update({'c': 3})
>>> original
{'a': 1, 'b': 2}
>>> new
{'a': 1, 'c': 3, 'b': 2}
そのoriginalため、浅いコピーを行っていたため、これにより値が更新される(そして「c」が追加される:3)と想定しました。あなたがリストのためにそれをするかのように:
>>> original = [1, 2, 3]
>>> new = original
>>> new.append(4)
>>> new, original
([1, 2, 3, 4], [1, 2, 3, 4])
これは期待どおりに機能します。
どちらも浅いコピーなので、なぜdict.copy()期待どおりに動作しないのですか?または、浅いコピーと深いコピーの私の理解に欠陥がありますか?
![「a = b」の例:「a」と「b」はどちらも「{1:L}」を指し、「L」は「[1、2、3]」を指します。](https://i.stack.imgur.com/4AQC6.png)
![「b = a.copy()」の例:「a」は「{1:L}」を指し、「b」は「{1:M}」を指し、「L」と「M」はどちらも「[ 1、2、3] '。](https://i.stack.imgur.com/Vtk4m.png)
![「b = copy.deepcopy(a)」の例:「a」は「{1:L}」を指し、「L」は「[1、2、3]」を指します。 「b」は「{1:M}」を指し、「M」は「[1、2、3]」の別のインスタンスを指します。](https://i.stack.imgur.com/BO4qO.png)