关于python:将字典附加到列表:python:将字典附加到列表 – 我看到类似行为的指针

python: Appending a dictionary to a list - I see a pointer like behavior

我在python解释器中尝试了以下方法:

1
2
3
4
5
6
7
8
9
10
>>>
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
>>>

在这里,在将字典"b"添加到列表"a"之后,我将更改字典"a"中键1对应的值。不知何故,这一变化也反映在名单上。当我在列表中附加字典时,我不仅仅是在附加字典的值吗?看起来好像我在列表中附加了一个指向字典的指针,因此对字典的更改也会反映在列表中。

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

谢谢你抽出时间来!


您的列表中包含对原始词典的引用,这是正确的。

a.append(b.copy())应该能做到。

记住,这是一个肤浅的复制品。另一种选择是使用copy.deepcopy(b),它可以进行深度复制。


还有口述

1
2
3
4
5
6
7
a = []
b = {1:'one'}

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

结果

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


使用副本和深度副本

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