このコードを試すと:
dict_a = dict_b = dict_c = {}
dict_c['hello'] = 'goodbye'
print(dict_a)
print(dict_b)
print(dict_c)
dict_a
私は、 、dict_b
、dict_c
辞書を初期化し、 にキーを割り当てるだけだと予想していたのでdict_c
、
{}
{}
{'hello': 'goodbye'}
しかし、代わりにコピースルー効果があるようです:
{'hello': 'goodbye'}
{'hello': 'goodbye'}
{'hello': 'goodbye'}
なぜ?
参照:
ベストアンサー1
これは、Python では、変数 (名前) は個々のオブジェクトへの参照にすぎないためです。 を割り当てると、実際にはメモリ アドレス (またはポインタ)が からdict_a = dict_b
にコピーされます。その辞書のインスタンスはまだ 1 つ残っています。dict_b
dict_a
目的の動作を得るには、dict.copy
メソッドを使用するか、copy.deepcopy
辞書にネストされた辞書またはその他のネストされたオブジェクトがある可能性がある場合は を使用します。
>>> a = {1:2}
>>> b = a.copy()
>>> b
{1: 2}
>>> b[3] = 4
>>> a
{1: 2}
>>> b
{1: 2, 3: 4}
>>>