は、私はほとんどの機能が使用する私のコードの先頭に辞書テンプレートを保存しようとした:入れ子の辞書copy()またはdeepcopy()?
- 辞書:キー=クライアント名、値= Dictionary2
- Dictionary2:キー=ユーザー名、値=なし
私はすべてのクライアントとそのユーザーで記入しました。次に、コードの各部分がこの辞書をコピーして、それ自身の出力を生成することができます。目標は、各出力がテンプレートのような "基本"辞書構造を持ち、Noneが変更できるということです。私は以下を使用し、このdictionnaryを使用して、各プロセスのために
:
process1dict = clientdict
# processing 1
output1dict = ... #modified version of original clientdict, the None values have been replaced by dictionaries/lists
process2dict = clientdict
# processing 2
output2dict = ... #same here but could be different
私が持っている問題はcliendictは、それがプロセスにコピーされるたびに変化することです! 最初のcliendict
のNone
の値のために、それは各プロセスの後に(もちろんそれぞれの出力に応じて)変更されることに気付きました。
編集:コピーライブラリが見つかりましたが、copy()
が私のケースを助けてくれないようです。 deepcopy()を試してみますが、copy()
はなぜ機能しませんでしたか?そしてなぜdeepcopy()
は?
はい、あなたはdeepcopy行う必要がある - >あなたは 'clientdict'あなたも'のdict(clientdict) 'や' clientdictすることができます修正するとき、それは変更されるので、それなし 'clientdictDNT'はちょうど、同じ基本辞書を指し.copy() ' – TemporalWolf
SOベテランのNed Batchelderによる[Pythonの名前と値に関する事実と神話](http://nedbatchelder.com/text/names.html)を読んでください。 –
deepcopy()を使用しない場合、新しい辞書のメンバーは、ベースディクショナリに埋め込まれている辞書を指します。 deepcopy()は、コピーされている辞書の内部のもののコピーを作成します。 –