2016-12-16 54 views
0

出于某种原因,当我修改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'}

+0

可能的重复[为什么字典中的顺序和集合是随意的?](http://stackoverflow.com/questions/15479928/why-is-the-order-in-dictionaries-and-sets-arbitrary) –

+0

不,字典正在改变 –

+0

不知道为什么@MoinuddinQuadri –

回答

1

mydictmydict2都指向内存中的同一个对象。当其中一个改变时,另一个也改变。他们引用了相同的字典。

仅使用赋值操作符来创建正确的副本是不够的。如果你想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()

0

你应该使用功能复制:

from copy import copy 
mydict = {1:'a', 2:'b'} 
mydict2 = copy(mydict) 
mydict2[1] = 'c' 
print(mydict2) 

对于同一个对象有两个链接。如果你想有两个对象,你应该复制你的字典

+0

你能详细解释一下这个答案吗?为什么要使用“copy”? – Dartmouth

0

你正在设置mydic2等于对象mydict。当你改变mydict2时,它会改变mydict1的内容。

尝试使用复制或copy.deepcopy如下所示:python docs

看到这个线程的例子:stackoverflow thread

1

mydictmydict2是同一个对象都引用。

因此,更改为mydictmydict2将更改同一个对象,因此它看起来像改变其中一个正在改变另一个。

0

mydict和mydict2都引用相同的字典,所以当您更改一个字典时,您也会更改另一个字典。