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

Kev*_*vin 1 python python-2.7

分配

a,b = c,a
Run Code Online (Sandbox Code Playgroud)

同样的

b,a = a,c
Run Code Online (Sandbox Code Playgroud)

这似乎是很简单情况相同a,b以及c是数字.

有没有这种情况失败?

Mar*_*ers 5

不,没有失败的情况.这两种说法是完全等价的,因为ab独立的.

这是因为右边的值在堆栈上把第一分配发生之前的地方(从左至右).分配给a之前b没有区别,因为a并且b是完全不同的名称,并且首先分配给任何一个不会影响另一个.

所以第一个声明:

a,b = c,a
Run Code Online (Sandbox Code Playgroud)

执行为(伪字节码*)

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
Run Code Online (Sandbox Code Playgroud)

而第二个

b,a = a,c
Run Code Online (Sandbox Code Playgroud)

被执行为

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
Run Code Online (Sandbox Code Playgroud)

不要紧,什么类型的参考值a,b或者c是.

如果您要进行分配和/或混合订阅,事情会变得更加混乱.在所有这些情况下,分配给的名称不是独立的,人们通常不会意识到所有赋值都是执行右侧表达式之后发生的,并且之后从左到右进行赋值.


*请参阅如何在python元组(a,b)=(b,a)内部交换成员?对于实际的字节码示例.


归档时间:

查看次数:

62 次

最近记录:

9 年,4 月 前