0

If I execute this code:

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

What I expect to see is:

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

But this is what I really get:

[1,3] [1,3]

Why calling b.remove(2) also affects a? What if I want to change b,while keeping a copy of the original content in a?

4

2 回答 2

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]
于 2013-07-24T16:50:35.667 回答
2

ab是同一个列表的两个名称,因此如果您通过一个名称更改列表,您可以通过另一个名称看到更改。如果您希望它们成为不同的列表,请制作一份副本:

b = a[:]

或者

b = list(a)
于 2013-07-24T16:52:00.437 回答