🔥
Python 3.9 の dict update 演算子について
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
のあるキーに対する値を変更しても、元の dictb
には影響しない。 - 元の dict である
b
のあるキーに対する値を変更しても、新しく作られたc
には影響しない。
Discussion