Nested dictionaries copy() or deepcopy()?
本问题已经有最佳答案,请猛点这里访问。
我试图在代码开头存储一个字典模板,大多数函数将使用:
- 字典:keys=客户端名称,values=字典2
- 字典2:keys=用户名,values=无
我把我们所有的客户和他们的用户都填满了。然后代码的每个部分都可以复制这个字典并生成它自己的输出。目标是每个输出都将具有相同的"基本"字典结构,就像模板一样,其中没有一个可以修改。
对于使用此词典的每个进程,我使用以下内容:
1 2 3 4 5 6 7 | 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 |
我的问题是阴蒂每次被复制到一个过程中都会发生变化!我注意到,由于我的初始
编辑:我找到了拷贝库,但
当您使用可变集合(如字典或列表)并执行赋值时,默认情况下不会创建该对象的副本,即,将某个dict
请参见以下基本示例:
1 2 3 4 5 6 7 8 9 | >>> orig = {"a": 1,"b": 2} >>> new = orig >>> new["a"] = 9 >>> orig {'a': 9, 'b': 2} >>> new {'a': 9, 'b': 2} >>> new is orig True |
要解决此问题,并使
1 2 3 4 5 6 7 8 9 10 | >>> import copy >>> orig = {"a": 1,"b": 2} >>> new = copy.deepcopy(orig) >>> new["a"] = 9 >>> orig {'a': 1, 'b': 2} >>> new {'a': 9, 'b': 2} >>> new is orig False |
号
另外,这里还有一个与上面链接的python文档的tl;dr:
Assignment statements in Python do not copy objects, they create bindings between a target and an object. For collections that are mutable or contain mutable items, a copy is sometimes needed so one can change one copy without changing the other.
号