正在分配
a,b = c,a
与
相同b,a = a,c
a
,b
和c
是数字的简单情况似乎相同。
是否存在失败的情况?
答案 0 :(得分:5)
不,没有失败的情况。这两个陈述完全相同,因为a
和b
独立。
这是因为在分配发生之前(从左到右),右侧值被放在堆栈第一个上。在a
之前分配给b
没有任何区别,因为a
和b
是完全不同的名称,并且对任何一个的分配都会影响另一个。< / 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
a
,b
或c
引用的值的类型并不重要。
如果您前往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