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

Python 分配a,b=c,a与b,a=a,c相同吗?,python,python-2.7,Python,Python 2.7,正在分配 a,b = c,a 同 b,a = a,c 对于a、b和c都是数字的简单情况似乎也是如此 有没有这种情况会失败?没有,没有这种情况会失败。这两个语句完全相等,因为a和b是独立的 这是因为在从左到右进行赋值之前,右边的值首先放在堆栈上。在b之前分配给a没有什么区别,因为a和b是完全不同的名称,并且先分配给其中一个不会影响另一个 因此,第一句话: a,b = c,a 作为伪字节码执行* 而第二个 b,a = a,c 被执行为 PUSH A ON STACK PUSH C ON ST

正在分配

a,b = c,a

b,a = a,c
对于a、b和c都是数字的简单情况似乎也是如此


有没有这种情况会失败?

没有,没有这种情况会失败。这两个语句完全相等,因为a和b是独立的

这是因为在从左到右进行赋值之前,右边的值首先放在堆栈上。在b之前分配给a没有什么区别,因为a和b是完全不同的名称,并且先分配给其中一个不会影响另一个

因此,第一句话:

a,b = c,a
作为伪字节码执行*

而第二个

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引用的值是什么类型并不重要

如果你去和/或去,事情会变得更加混乱。在所有这些情况下,所分配的名称都不是独立的,人们通常没有意识到,所有的分配都是在右侧表达式被执行之后进行的,并且分配是从左到右进行的


*有关实际字节码示例,请参阅。

否,没有失败的情况。这两个语句完全相等,因为a和b是独立的

这是因为在从左到右进行赋值之前,右边的值首先放在堆栈上。在b之前分配给a没有什么区别,因为a和b是完全不同的名称,并且先分配给其中一个不会影响另一个

因此,第一句话:

a,b = c,a
作为伪字节码执行*

而第二个

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引用的值是什么类型并不重要

如果你去和/或去,事情会变得更加混乱。在所有这些情况下,所分配的名称都不是独立的,人们通常没有意识到,所有的分配都是在右侧表达式被执行之后进行的,并且分配是从左到右进行的


*有关实际字节码示例,请参阅。

无论您使用什么,在所有情况下都是相同的。只要语句与您的语句相同,结果将是相同的。

无论您使用什么,在所有情况下都是相同的。只要你的陈述和你的一样,结果都是一样的。

简短的回答---是的。。 a、 b=c,a表示a=c,b=a。。。 b、 a=a,c表示b=a,a=c

简短回答---是的。。 a、 b=c,a表示a=c,b=a。。。
b、 a=a,c表示b=a和a=c

无论你完全改变了这个问题,都是一样的。现在已在同一对象上包含属性指定。赋值从左到右进行,您的左手边有两个a引用,一个带有属性。我已回滚您的编辑,因为您将a,b=c,a替换为a,a.b=c,a,这到目前为止不是一回事。@Renegade:我已经解决了您已经面临的问题;这里要记住的重要一点是,首先计算右手边,然后从左到右分配任务。@Renegade:你的“真正问题”将是一个复制品,真的。不管你完全改变了问题,都是一样的。现在已在同一对象上包含属性指定。赋值从左到右进行,您的左手边有两个a引用,一个带有属性。我已回滚您的编辑,因为您将a,b=c,a替换为a,a.b=c,a,这到目前为止不是一回事。@Renegade:我已经解决了您已经面临的问题;这里需要记住的重要一点是,首先计算右侧,然后从左到右赋值。@Renegade:您的“真正问题”将是的副本,真的。@Renegade:仔细阅读我的答案:在从左到右赋值之前,首先将右侧值放在堆栈上。所以,当你从左到右分配给current,current.node时,你认为current.node在第一次分配给current之前是什么?@Renegade:仔细阅读我的答案:在从左到右分配之前,右边的值首先放在堆栈上。那么,当您从左到右分配给current,current.node时,您认为current.node在第一次分配给current时是什么?