将字典追加到列表中 - 我看到指针行为
我在Python解释器中尝试了以下操作:
>>> a = []
>>> b = {1:'one'}
>>> a.append(b)
>>> a
[{1: 'one'}]
>>> b[1] = 'ONE'
>>> a
[{1: 'ONE'}]
在这里,我把字典b
添加到列表a
中,然后我又修改了字典b
中键1
对应的值。奇怪的是,这个修改在列表中也能看到。按理说,我把字典添加到列表中,不应该只是添加字典的值吗?看起来我好像是把字典的“指针”添加到了列表中,所以字典的变化也反映在了列表里。
我不想让这个变化在列表中显示出来。我该怎么做呢?
3 个回答
3
使用浅拷贝和深拷贝
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)
,这个方法会做一个深拷贝。