🔥

Python 3.9 の dict update 演算子について

2021/09/15に公開

Overview

Python 3.9 には dict の update 演算子 (| および |=) が導入された。
これにより作られた dict はもとの dict とどういう関係にあるか見てみる。

Summary

  • 作られた dict の初期値は元になった dict を shallow copy して作られる。
  • その後のキー値に対する変更は独立である。

ソースコード

a: dict = {'a': 3, 'b': 4}
b: dict = {'c': 5, 'd': []}
c: dict = a | b

print(a)
print(b)
print(c)
assert c['d'] is b['d']  # 同じオブジェクトを指す

c['c'] = 0
print()
print(b)  # c の変更は b に伝搬しない
print(c)

b['d'] = 0
print()
print(b)
print(c)  # b の変更は c に伝搬しない

結果

{'a': 3, 'b': 4}
{'c': 5, 'd': []}
{'a': 3, 'b': 4, 'c': 5, 'd': []}

{'c': 5, 'd': []}
{'a': 3, 'b': 4, 'c': 0, 'd': []}

{'c': 5, 'd': 0}
{'a': 3, 'b': 4, 'c': 0, 'd': []}

結果

  • assert 文の結果から、c['d'] が指すオブジェクトは b['d'] と同一であることがわかる。
  • c のあるキーに対する値を変更しても、元の dict b には影響しない。
  • 元の dict である b のあるキーに対する値を変更しても、新しく作られた c には影響しない。

Discussion