私は私が辞書に浅いコピー操作を実装しようとしていた中でPythonコードの下の部分を持っている:浅いコピーが
のようなネストされたデータ構造がある場合、私の理解あたりとして今d = {'name':'Subhayan','age':32,'friends':['papa','mama']}
new_d = d.copy()
new_d['friends'] = []
print (d)
print (new_d)
私の場合、浅いコピーのリストは機能しません。 new_d dictの変更もd-dictに影響します。
私の理解が正しいかどうか誰かに教えてもらえますか?
このスクリプトを実行した後の回答は、何か違うものです。
{'name': 'Subhayan', 'age': 32, 'friends': ['papa', 'mama']}
{'name': 'Subhayan', 'age': 32, 'friends': []}
これは明らかにディープコピーです。
どこが間違っていますか?
はい、参照はd.copy()の一部として「ディープコピー」されません。 コピーしたい場合は、copy.deepcopy(d)を使用する必要があります。 "空の"参照が必要な場合は、独自のコピー機能を実装する必要があります。 – Aviad
割り当てを実行して新しいオブジェクトを名前にバインドする方法と、名前に結びついている既存のオブジェクトの突然変異。 'new_d ['friends'] [:] = []'この突然変異を行うとどうなるか見てみましょう。 –