You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中语句a = a, b = b, a的执行原理及结果疑问

关于Python变量交换语句的解析

先拆解你提出的核心问题:为什么a = a, b = b, a运行后,变量交换结果和a, b = b, a一致?我们一步步理清楚:

1. 标准变量交换的逻辑

a, b = b, a能实现交换的核心是Python的元组解包:

  • 第一步:Python先计算右侧表达式,生成元组(b的初始值, a的初始值),也就是(20, 10)
  • 第二步:把元组的两个元素依次赋值给左侧的a和b,完成交换,最终a=20,b=10。

2. 你写的a = a, b = b, a到底是什么?

首先明确:这个语句在Python3中是语法错误——赋值语句不能作为元组的元素(除非用3.8+的海象运算符:=,但写法也不匹配)。但根据你描述的输出结果,大概率是输入时的笔误,实际等价于a, b = a, b = b, a(链式多重赋值):

  • Python会先计算最右侧的b, a,得到元组(20, 10)
  • 然后把这个元组依次赋值给左侧的两组a, b:先给第一组a, b赋值(完成交换),再给第二组a, b重复赋值(结果不变)
  • 所以最终输出还是20, 10,看起来前缀的赋值没影响,本质是重复赋值了同一个交换后的结果。

如果严格按照你写的语句强行运行(比如某些旧环境),结果会完全不同:

  • 先执行b = b, a:把b赋值为元组(20, 10)
  • 再执行a = (a, b):把a赋值为(10, (20, 10))
  • 这时候输出会是((10, (20, 10)), (20, 10)),和你描述的结果不符,所以肯定是笔误导致的。

3. 对比代码的差异

你给出的对比代码:

a, b = b, a  # 先完成交换,a=20,b=10
a = a, b     # 把a重新赋值为元组(20, 10),b保持10不变

这时候a变成了包含交换后值的元组,b还是交换后的单个值,所以输出(20, 10) 10,和标准交换的结果差异明显。

内容的提问来源于stack exchange,提问作者disjointdrip87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 12:41:08