Python分配错误的字典值

时间:2011-08-31 09:26:25

标签: python dictionary

在我的代码中:

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

我在制作字典副本和更改值方面遇到了一些麻烦。

当我想更改其中一个词典中的值时,原始值和副本的值都会更改。但我只想改变原件并将副本更改为其他内容。我似乎无法找到问题,尽管它是如此小而相对简单的代码。

2 个答案:

答案 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