分配a,b = c,a与b相同,a = a,c?

时间:2016-09-03 18:06:28

标签: python python-2.7

正在分配

a,b = c,a

相同
b,a = a,c

abc是数字的简单情况似乎相同。

是否存在失败的情况?

3 个答案:

答案 0 :(得分:5)

不,没有失败的情况。这两个陈述完全相同,因为ab 独立

这是因为在分配发生之前(从左到右),右侧值被放在堆栈第一个上。在a之前分配给b没有任何区别,因为ab是完全不同的名称,并且对任何一个的分配都会影响另一个。< / p>

所以第一个声明:

a,b = c,a

执行为(伪字节码 *

PUSH C ON STACK
PUSH A ON STACK
SWAP TOP TWO VALUES OF STACK
POP TOP OF STACK, STORE IN A
POP TOP OF STACK, STORE IN B

而第二个

b,a = a,c

执行
PUSH A ON STACK
PUSH C ON STACK
SWAP TOP TWO VALUES OF STACK
POP TOP OF STACK, STORE IN B
POP TOP OF STACK, STORE IN A

abc引用的值的类型并不重要。

如果您前往chain assignments和/或mix in subscriptions,事情就会变得更加混乱。在所有这些情况下,分配的名称不是独立的,人们通常不会意识到所有的分配都是在执行右侧表达式之后发生的,并且分配是从之后从左到右。

* 有关实际的字节码示例,请参阅How does swapping of members in the python tuples (a,b)=(b,a) work internally?

答案 1 :(得分:1)

在所有情况下,无论您与谁合作,都是一样的。只要陈述是等价的(就像你的陈述一样),结果就是一样的。

答案 2 :(得分:0)

简答-----&#34;是&#34; .. a,b = c,a表示a = c,b = a ... b,a = a,c表示b = a和a = c