私はこれをPythonで行うと、すべてのキーを一度に更新します。代わりに.get
の私は[]
演算子を使用している場合Python dict.fromkeysは同じid要素を返します
>>> base = {}
>>> keys = ['a', 'b', 'c']
>>> base.update(dict.fromkeys(keys, {}))
>>> base.get('a')['d'] = {}
>>> base
{'a': {'d': {}}, 'c': {'d': {}}, 'b': {'d': {}}}
>>> map(id, base.values())
[140536040273352, 140536040273352, 140536040273352]
これは起こりません:
>>> base['a']['d'] = {}
>>> base
{'a': {'d': {}}, 'c': {}, 'b': {}}
なぜ?
「dict.fromkeys」がどのように動作するのかは、それぞれを個別のオブジェクトにするために行うことができます。 – vaultah
Pythonはあなたが 'dict.fromkeys()'に渡した辞書オブジェクトを自動的にクローンしません。 3つのキーはすべて同じdictを参照します。 – Blender
問題は、関数やクラスがそのように振る舞うのではなく、それがうまくいくと思いますか?ワークフローに驚いたことはありますか?そうであれば、別のAPIを考えてメーリングリストに提案してください。 –