Python - 从字典中分配和更改列表

时间:2013-01-09 16:22:20

标签: python list dictionary python-2.7

我在用他的Python 2.7脚本帮助同事时发现了一些奇怪的事情。他有一个字典,列表作为字典值。他将字典值分配给新变量,然后对列表执行一些编辑。得到我的奇怪部分是新变量中的列表更改也在字典中反映出来。我在shell中重复了一个简单的例子,我在下面发布了它。我也试过同样的事情,但用字符串作为字典值,但没有效果。我在这里缺少什么或者这是某种错误吗?感谢。

>>> dict1 = {}
>>> dict1['foo'] = [1,2,3]
>>> print dict1     
 {'foo': [1, 2, 3]}    
>>> bar = dict1['foo']
>>> bar.append(4)
>>> print dict1    
 {'foo': [1, 2, 3, 4]}

在上面的示例中,我希望将4附加到 bar ,并将'foo'的值保留为[1,2,3]。

1 个答案:

答案 0 :(得分:3)

您没有获得列表的副本,您将获得对列表本身的引用。由于列表是可变的,因此完全可以预期行为。

将此与使用指向列表的第二个变量进行比较:

>>> a = [1, 2, 3]
>>> b = a
>>> b.append(4)
>>> a
[1, 2, 3, 4]

如果您想要一个独立的列表,请复制一份:

>>> c = list(a)
>>> c.append(5)
>>> c
[1, 2, 3, 4, 5]
>>> a
[1, 2, 3, 4]

制作副本的另一种方法是使用完整列表切片:

>>> c = a[:]