2021年8月3日火曜日

dict をコピーする場合は配列の中であっても copy しなければならない

dict をコピーする場合は配列の中であっても copy しなければならない

概要

dict をコピーして別の dict を作成する場合に dict の値を上書きする場合には必ず copy() メソッドを使いましょうという話です 配列の中に dict があっても copy() を使います

環境

  • macOS 11.5
  • Python 3.8.3

サンプルコード: ダメな例

aa = [{"key":"value"}]
bb = aa.copy()
for b in bb:
    b["key"] = "value2"

print(aa) # -> [{'key': 'value2'}]
print(bb) # -> [{'key': 'value2'}]

サンプルコード: 良い例

aa = [{"key":"value"}]
bb = aa.copy()
for i, b in enumerate(bb):
    tb = b.copy()
    tb["key"] = "value2"
    bb[i] = tb

print(aa) # -> [{'key': 'value'}]
print(bb) # -> [{'key': 'value2'}]

最後に

もう少し良い解決方法がありそう deepcopy という手法があるようです

0 件のコメント:

コメントを投稿