我想用python做一个dict
的深拷贝,不幸的是.deepcopy()
的dict
方法不存在,我该怎么做呢?
>>> my_dict = {'a': [1, 2, 3], 'b': [4, 5, 6]}
>>> my_copy = my_dict.deepcopy()
Traceback (most recent calll last):
File "<stdin>", line 1, in <module>
AttributeError: 'dict' object has no attribute 'deepcopy'
>>> my_copy = my_dict.copy()
>>> my_dict['a'][2] = 7
>>> my_copy['a'][2]
7
最后一行应为3
。
我希望my_dict
中的修改不会影响快照my_copy
。
我该怎么做?解决方案应该与Python 3.x兼容。
3条答案
按热度按时间vi4fp9gy1#
不如这样:
Python 2或Python 3:
xn1cxnb42#
***dict.copy()***是字典的浅复制函数
***id***是一个内置函数,它提供变量的地址
首先,你需要理解“为什么会发生这种特殊的问题?”
在关键字'a'的两个字典中出现的列表地址指向相同的位置。
因此,当您更改my_dict中列表的值时,my_copy中的列表也会更改。
问题中提到的数据结构的解决方案:
或者你可以使用上面提到的deepcopy。
nhaq1z213#
Python 3.x
这将产生:
如果没有
new_dict = deepcopy(original_dict)
,则无法删除“e”元素。因为如果循环是
for key in original_dict
,并且试图修改original_dict,则会观察到RuntimeError:因此,为了在迭代中修改字典,必须使用字典的副本。
下面是一个从字典中删除元素的示例函数: