Python:解压缩到数组元素中

问题描述:

为什么当我尝试将目标设置为数组元素时,解包的行为会发生变化?Python:解压缩到数组元素中

>>> def foobar(): return (1,2) 
>>> a,b = foobar() 
>>> (a,b) 
(1, 2) 
>>> a = b = [0, 0] # Make a and b lists 
>>> a[0], b[0] = foobar() 
>>> (a, b) 
([2, 0], [2, 0]) 

在第一种情况下,我得到了我期望的行为。在第二种情况下,两个赋值都使用返回的元组中的最后一个值(即'2')。为什么?

+0

拆包并没有改变的行为,你是做多分配在第二个例子,不拆包 – jamylak 2013-04-18 03:13:43

当你做a = b = [0, 0],你让两个ab指向相同名单。因为它们是可变的,所以如果你改变了,你就改变它们。使用这个来代替:

a, b = [0, 0], [0, 0] 
+0

谢谢,波动,对于这个建议。 – 2013-04-18 03:00:22

a = b = [0, 0]#使得a和b的相同列表

+0

gnibbler,你打我太吧。 :)我刚刚意识到我的愚蠢,并回到删除问题,你已经回答。感谢您的及时回复。 – 2013-04-18 02:59:54