出于某种原因,当我修改mydict2它改变mydict的Python:字典改变
下面的内容是我的代码:
mydict = {1:'a', 2:'b'}
mydict2 = mydict
mydict2[1] = 'c'
print(mydict2)
如果你试试这个,它输出{1: 'c', 2: 'b'}
它应该输出{1: 'a', 2: 'b'}
当你做print(mydict)
它应该输出{1: 'c', 2: 'b'}
出于某种原因,当我修改mydict2它改变mydict的Python:字典改变
下面的内容是我的代码:
mydict = {1:'a', 2:'b'}
mydict2 = mydict
mydict2[1] = 'c'
print(mydict2)
如果你试试这个,它输出{1: 'c', 2: 'b'}
它应该输出{1: 'a', 2: 'b'}
当你做print(mydict)
它应该输出{1: 'c', 2: 'b'}
mydict
和mydict2
都指向内存中的同一个对象。当其中一个改变时,另一个也改变。他们引用了相同的字典。
仅使用赋值操作符来创建正确的副本是不够的。如果你想mydict2
指向字典的副本mydict
点,你需要告诉Python 明确进行复制:但是
>>> mydict = {1:'a', 2:'b'}
>>> mydict2 = mydict.copy()
>>> mydict2[1] = 'c'
>>> mydict
{1: 'a', 2: 'b'}
>>> mydict2
{1: 'c', 2: 'b'}
>>>
请注意,如果你有一个嵌套的字典结构此方法将失败。在这种情况下,您需要使用copy.deepcopy()
。
你应该使用功能复制:
from copy import copy
mydict = {1:'a', 2:'b'}
mydict2 = copy(mydict)
mydict2[1] = 'c'
print(mydict2)
对于同一个对象有两个链接。如果你想有两个对象,你应该复制你的字典
你能详细解释一下这个答案吗?为什么要使用“copy”? – Dartmouth
你正在设置mydic2等于对象mydict。当你改变mydict2时,它会改变mydict1的内容。
尝试使用复制或copy.deepcopy如下所示:python docs
看到这个线程的例子:stackoverflow thread
mydict
和mydict2
是同一个对象都引用。
因此,更改为mydict
或mydict2
将更改同一个对象,因此它看起来像改变其中一个正在改变另一个。
mydict和mydict2都引用相同的字典,所以当您更改一个字典时,您也会更改另一个字典。
可能的重复[为什么字典中的顺序和集合是随意的?](http://stackoverflow.com/questions/15479928/why-is-the-order-in-dictionaries-and-sets-arbitrary) –
不,字典正在改变 –
不知道为什么@MoinuddinQuadri –