在我的代码中:
line_x = 10
c = 'A'
d = 'B'
a = {}
a['one']='| | | | | |'
a['two']='| | | | | |'
#untill thirteen
vak = a.keys()
b = a #copy the dictionary
spot = a[vak[0]]
spot2 = b[vak[0]]
a[vak[0]] = spot[:(line_x)]+ d+ spot[(line_x+1):]
b[vak[0]] = spot2[:(line_x)]+ c+ spot2[(line_x+1):]
print a[vak[0]] #output_a = | | | A | | |
print b[vak[0]] #output_b = | | | A | | | <- which should be a 'B' in the middle
我在制作字典副本和更改值方面遇到了一些麻烦。
当我想更改其中一个词典中的值时,原始值和副本的值都会更改。但我只想改变原件并将副本更改为其他内容。我似乎无法找到问题,尽管它是如此小而相对简单的代码。
答案 0 :(得分:5)
b = a
不复制字典,它重新绑定b
以指向与a
相同的对象(因此,当您更改a
时,您可以观察效果也在b
上。请改用b = copy.copy(a)
(copy
模块)。
答案 1 :(得分:3)
在
b = a #copy the dictionary
不会复制字典,只是它的引用。你必须明确地复制它:
b = copy(a)
这将创建字典的副本,您可以使用它们进行操作,它将起作用。请记住,如果你在一个中更改它们,那么字典中的可变对象将在两者中都发生变化(如果它们仍然存在于两者中)。看看这个:
http://en.wikipedia.org/wiki/Object_copy#Deep_vs._Shallow_vs._Lazy_copy