如果我执行此代码:
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
保留原始内容的副本,该怎么办?
答案 0 :(得分:4)
执行b = a
时,只需创建对同一列表的另一个引用即可。因此,对该列表的任何修改都会影响a
和b
。因此,执行b.remove(2)
会影响您拥有的单个列表。
如果您想获得预期的结果,可以创建列表的副本:
b = a[:]
这样,您可以创建列表的副本,并且可以在不更改其他列表的情况下修改列表。
>>> a = [1,2,3]
>>> b = a[:]
>>> b.remove(2)
>>> print a,b
[1, 2, 3] [1, 3]
答案 1 :(得分:2)
a
和b
是同一列表的两个名称,因此如果您通过一个名称更改列表,则可以通过其他名称查看更改。如果您希望它们成为不同的列表,请复制:
b = a[:]
或
b = list(a)