0

当我尝试将目标设为数组元素时,为什么解包行为会发生变化?

>>> 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')。为什么?

4

2 回答 2

3

当你这样做时a = b = [0, 0],你正在制作两者ab指向同一个列表。因为它们是可变的,所以如果你改变任何一个,你就会改变两者。改用这个:

a, b = [0, 0], [0, 0]
于 2013-04-18T02:56:31.533 回答
2

a = b = [0, 0]# 使 a 和 b 成为同一个列表

于 2013-04-18T02:55:50.927 回答