Python 为什么’;t执行“;a、 x=x,a";两次会导致值的变化吗?

Python 为什么’;t执行“;a、 x=x,a";两次会导致值的变化吗?,python,Python,在观看关于测验的解释时,我发现了以下代码片段: a, x = x, a a, x = x, a print a print x 视频中说,最终结果是x和a交换,如果我们再次这样做,它将位于原始位置,不会改变任何变量的值 我的问题是,如果我第一次分配a=>x和x=>a,那么即使我们做了完全相同的代码,并且为相同的变量分配了相同的值,代码的值也不会改变。但是为什么视频解释说a和x的值将被交换两次,并在执行语句之前获得相同的值呢?语法a,x=x,a交换值,因为赋值操作符(=)的右边有赋值如前所述,首

在观看关于测验的解释时,我发现了以下代码片段:

a, x = x, a
a, x = x, a
print a
print x
视频中说,最终结果是
x
a
交换,如果我们再次这样做,它将位于原始位置,不会改变任何变量的值


我的问题是,如果我第一次分配
a
=>
x
x
=>
a
,那么即使我们做了完全相同的代码,并且为相同的变量分配了相同的值,代码的值也不会改变。但是为什么视频解释说
a
x
的值将被交换两次,并在执行语句之前获得相同的值呢?

语法
a,x=x,a
交换值,因为赋值操作符(
=
)的右边有赋值如前所述,首先对其进行评估,然后分配给其值。从逻辑上讲,如果此操作执行两次,则第二次交换会将变量返回到其原始值

请注意,如果改为编写
a=x;x=a
那么
a
x
都将作为
x
的起始值,因为每个语句都是从左到右顺序求值的

演示:

>>> a = 1
>>> x = 2
>>> a,x = x,a
>>> a,x
(2, 1)
>>> 
>>> a = 1
>>> x = 2
>>> a = x; x = a
>>> a,x
(2, 2)

对于第一个问题,只要执行
x=a
,如果未在其他地方分配
x
,则会丢失该值,因此它们无法交换。您需要第三个变量(通常称为
temp
)来保存
x
的值以进行交换;除非我缺少某种条纹技术来实现这一点。
a=x,x=a
是一个错误。你是说
a,x=x,a
?@Carcigenicate你可以很容易地使用a,x=x,a来不需要临时变量。@JohnGordon抱歉。我是说a,x=x,a。我会编辑它。@为什么要隐式地创建第三个变量,不是吗?我以前从未在Python中这样做过,但再次强调,一旦覆盖
a
,该值就消失了。如果Python在后台进行复制,那么我想这会起作用。从语法上讲,
a,x=x,a
的右侧创建一个包含两个元素的元组,然后左侧将元组解压为两个变量。但是,从Python2.6开始,内部优化会识别这种常见的习惯用法,并跳过元组的创建。