执行list.pop()时出现了意外结果?

3

我试图将 a = x 并且 b = x.pop() 进行赋值。但是我得到了意外的结果。你能解释一下吗?

>>> x = [10, 11, 12, 13]
>>> a, b = x, x.pop(2)
>>> print a
[10, 11, 13] # Shouldn't I get a = [10, 11, 12, 13]?
>>> print b
12

2
x 是可变的。a = xx 改变了,因此指向同一对象的 a 也改变了。 - Stephen Rauch
这是正确的结果。 - Harsha Biyani
可能是Immutable vs Mutable types的重复问题。 - Stephen Rauch
@StephenRauch 我在Python方面相对初学者。我不知道可变和不可变对象的概念。另一个提问者似乎已经知道这个了。 - fahimabid07
3个回答

4
由于您引用了直接列表,因此它会弹出并将列表中剩余的内容分配给其它变量。如果您有列表的副本,请尝试以下方法:
x = [10, 11, 12, 13]
a,b = x.copy(),x.pop(2)
print(a) # your expected output

2
序列可以通过切片复制,而不是使用 x.copy() 方法,因此可以通过 x[:] 完成。Python FAQ [https://docs.python.org/3/faq/programming.html#how-do-i-copy-an-object-in-python] - Matt. Stroh
@Matt.St 同意 - Narendra

0
当你说x = a时,ax都指向同一个列表,因此修改a也会修改x。如果你说a=list(x),那么a将是列表x的一个单独副本。

0

你将得到 a = [10,11,13],b = 12。

执行 'b = x.pop()' 后会弹出一个值 x,并且 x 会永久改变,即在执行值 'b' 后的整个程序中都会改变。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接