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

Python新手疑问:为何逗号赋值可实现两变量无临时变量交换?

为什么Python里用a,b = b,a能直接交换两个变量?

嘿,这个问题问得特别到位!刚入门Python的时候,我第一次看到这种写法也愣了一下——毕竟在C、Java这类语言里,交换两个变量必须得用个临时变量过渡才行,哪能这么“任性”地直接写?

其实核心在于Python的**元组解包(tuple unpacking)**机制,咱们一步步拆解这个过程就清楚了:

  • 第一步:Python会先计算等号右侧的b,a表达式。这行代码看起来简单,但Python会自动把它打包成一个临时元组,就像你手动写(b,a)一样。拿你的代码举例,此时元组里的内容就是("Stirling", 12)——完全保留了b和a的原始值。
  • 第二步:Python把这个临时元组里的元素,按顺序赋值给等号左侧的变量列表。也就是把元组的第一个元素"Stirling"赋值给a,第二个元素12赋值给b。

对比一下传统的交换方式你就更明白为什么这能生效了:

# 传统写法:需要临时变量
temp = a
a = b
b = temp

Python的a,b = b,a其实是把这三步操作封装成了一行语法糖——底层还是创建了临时存储(那个元组),只不过不需要你手动声明临时变量而已。

而且关键的一点是:右侧表达式的求值是在所有赋值操作之前完成的。这就避免了像a = b; b = a这种错误写法里,a被覆盖后再赋值给b的问题。在a,b = b,a里,b和a的原始值在赋值前就已经被完整保存到元组里了,所以交换结果完全符合预期。

顺便说一句,这种元组解包的用法还能扩展到更多场景:比如一次性给多个变量赋值x,y,z = 10,20,30,或者交换三个变量a,b,c = c,a,b,原理都是一模一样的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:16:47