Python 克隆词典被对新词典的更改覆盖

Python 克隆词典被对新词典的更改覆盖,python,dictionary,Python,Dictionary,我觉得这肯定是我以前问过的问题,但我一直无法找到我正在寻找的解决方案: 我有一个简单的字典,包含一个键和一个列表。我想复制那本词典以备将来使用,但我所做的任何更改都会影响我的副本,b: 是的,dict.copy返回字典的浅层副本: a.copy?? Docstring: D.copy() -> a shallow copy of D Type: builtin_function_or_method 浅复制构造一个新的复合对象,然后尽可能在其中插入对原始对象的引用 相反,请使用执

我觉得这肯定是我以前问过的问题,但我一直无法找到我正在寻找的解决方案:

我有一个简单的字典,包含一个键和一个列表。我想复制那本词典以备将来使用,但我所做的任何更改都会影响我的副本,b:

是的,dict.copy返回字典的浅层副本:

a.copy??
Docstring: D.copy() -> a shallow copy of D
Type:      builtin_function_or_method
浅复制构造一个新的复合对象,然后尽可能在其中插入对原始对象的引用

相反,请使用执行深度复制的:

深度副本构造一个新的复合对象,然后递归地将在原始副本中找到的对象的副本插入其中

是的,dict.copy返回字典的浅层副本:

a.copy??
Docstring: D.copy() -> a shallow copy of D
Type:      builtin_function_or_method
浅复制构造一个新的复合对象,然后尽可能在其中插入对原始对象的引用

相反,请使用执行深度复制的:

深度副本构造一个新的复合对象,然后递归地将在原始副本中找到的对象的副本插入其中


那是因为你没有把字典翻得很深

这将为您指明正确的方向:

简而言之,当您复制字典时,您只是复制指向字典中项目的指针。因此,当您更改一个字典中的值时,由于两个字典中的指针相同,因此更改会立即显示在另一个字典中


通过执行deepcopy,可以将值从一个字典复制到另一个字典。现在您有了两份独立的副本。

这是因为您没有对字典进行深度复制

这将为您指明正确的方向:

简而言之,当您复制字典时,您只是复制指向字典中项目的指针。因此,当您更改一个字典中的值时,由于两个字典中的指针相同,因此更改会立即显示在另一个字典中


通过执行deepcopy,可以将值从一个字典复制到另一个字典。现在您有了两份单独的副本。

如果我理解正确,.copy会进行浅层复制,因此您词典中的列表仍然作为参考传递。您需要使用深度复制

import copy a = {'kn': [8, 9, 10, 11, 12]} b = copy.deepcopy(a)
如果我理解正确,.copy会进行浅层复制,因此字典中的列表仍然作为引用传递。您需要使用深度复制

import copy a = {'kn': [8, 9, 10, 11, 12]} b = copy.deepcopy(a)
您使用了.copy的浅版本,即您已创建了两个字典副本,但两个副本仍然包含相同的列表引用。如前所述,您需要使用copy.deepcopy,区别在于:

浅复制构造一个新的复合对象,然后尽可能在其中插入对原始对象的引用

深度副本构造一个新的复合对象,然后递归地将在原始副本中找到的对象的副本插入其中


您使用了.copy的浅版本,即您已创建了两个字典副本,但两个副本仍然包含相同的列表引用。如前所述,您需要使用copy.deepcopy,区别在于:

浅复制构造一个新的复合对象,然后尽可能在其中插入对原始对象的引用

深度副本构造一个新的复合对象,然后递归地将在原始副本中找到的对象的副本插入其中