Python は代入時にオブジェクトのコピーを作成しますか? 質問する

Python は代入時にオブジェクトのコピーを作成しますか? 質問する

このコードを試すと:

dict_a = dict_b = dict_c = {}
dict_c['hello'] = 'goodbye'

print(dict_a)
print(dict_b)
print(dict_c)

dict_a私は、 、dict_bdict_c辞書を初期化し、 にキーを割り当てるだけだと予想していたのでdict_c

{}
{}
{'hello': 'goodbye'}

しかし、代わりにコピースルー効果があるようです:

{'hello': 'goodbye'}
{'hello': 'goodbye'}
{'hello': 'goodbye'}

なぜ?


参照:

ベストアンサー1

これは、Python では、変数 (名前) は個々のオブジェクトへの参照にすぎないためです。 を割り当てると、実際にはメモリ アドレス (またはポインタ)が からdict_a = dict_bにコピーされます。その辞書のインスタンスはまだ 1 つ残っています。dict_bdict_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}
>>> 

おすすめ記事