理解Python变量赋值

时间:2013-07-24 16:49:43

标签: python variables

如果我执行此代码:

a = [1,2,3]
b = a
b.remove(2)
print(a,b)

我期望看到的是:

[1,2,3] [1,3]

但这是我真正得到的:

[1,3] [1,3]

为什么调用b.remove(2)也会影响a? 如果我要更改b,同时在a保留原始内容的副本,该怎么办?

2 个答案:

答案 0 :(得分:4)

执行b = a时,只需创建对同一列表的另一个引用即可。因此,对该列表的任何修改都会影响ab。因此,执行b.remove(2)会影响您拥有的单个列表。

如果您想获得预期的结果,可以创建列表的副本:

b = a[:]

这样,您可以创建列表的副本,并且可以在不更改其他列表的情况下修改列表。

>>> a = [1,2,3]
>>> b = a[:]
>>> b.remove(2)
>>> print a,b
[1, 2, 3] [1, 3]

答案 1 :(得分:2)

ab是同一列表的两个名称,因此如果您通过一个名称更改列表,则可以通过其他名称查看更改。如果您希望它们成为不同的列表,请复制:

b = a[:]

b = list(a)