python:将字典附加到列表 - 我看到一个类似行为的指针

时间:2011-03-09 11:02:54

标签: python list dictionary

我在python解释器中尝试了以下内容:

>>>
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
>>>

这里,在将字典“b”附加到列表“a”之后,我正在更改字典“a”中与键1对应的值。不知怎的,这种变化也反映在列表中。当我将字典附加到列表中时,我不只是附加字典的值吗?看起来好像我已经将一个指向字典的指针添加到列表中,因此对字典的更改也会反映在列表中。

我不希望更改反映在列表中。我该怎么做?

感谢您的时间!

3 个答案:

答案 0 :(得分:94)

你的名单中包含引用到原始字典是正确的。

a.append(b.copy())应该可以解决问题。

请记住,这会产生浅色副本。另一种方法是使用copy.deepcopy(b),这是一个深层复制。

答案 1 :(得分:17)

还有 dict

a = []
b = {1:'one'}

a.append(dict(b))
print a
b[1]='iuqsdgf'
print a

结果

[{1: 'one'}]
[{1: 'one'}]

答案 2 :(得分:1)

使用复制和深层复制

  

http://docs.python.org/library/copy.html