将字典追加到列表中 - 我看到指针行为

108 投票
3 回答
250627 浏览
提问于 2025-04-16 13:20

我在Python解释器中尝试了以下操作:

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

在这里,我把字典b添加到列表a中,然后我又修改了字典b中键1对应的值。奇怪的是,这个修改在列表中也能看到。按理说,我把字典添加到列表中,不应该只是添加字典的值吗?看起来我好像是把字典的“指针”添加到了列表中,所以字典的变化也反映在了列表里。

我不想让这个变化在列表中显示出来。我该怎么做呢?

3 个回答

3

使用浅拷贝和深拷贝

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

40

还有使用字典的方法

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

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

结果

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

你说得对,你的列表里包含了对原始字典的一个引用

a.append(b.copy()) 这个方法可以解决这个问题。

不过要注意,这个方法是做了一个浅拷贝。你也可以使用 copy.deepcopy(b),这个方法会做一个深拷贝。

撰写回答