1. ホーム
  2. python

[解決済み] python: 辞書をリストに追加する - ポインタのような動作が見える

2022-11-19 11:40:37

質問

Pythonインタプリタにて以下を試しました。

>>>
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
>>>

ここでは、リスト 'a' に辞書 'b' を追加した後、辞書 'a' のキー 1 に対応する値を変更しています。この変更は、なぜかリストにも反映されます。辞書をリストに追加するとき、私は辞書の値を追加しているだけではないのでしょうか?辞書へのポインタをリストに追加したように見えるので、辞書への変更がリストにも反映されています。

リストに変更を反映させたくありません。どうすればよいでしょうか。

お忙しい中、ありがとうございます。

どのように解決するのですか?

あなたのリストには、正しい 参照 を含むという点で正しいです。

a.append(b.copy()) でうまくいくはずです。

これは浅いコピーを作成することに留意してください。代替案としては copy.deepcopy(b) を使うことで、ディープコピーを作ることができます。