python深入理解变量交换x,y=y,x实现机制--元组
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
python深⼊理解变量交换x,y=y,x实现机制--元组
python中有⼀种赋值机制即多元赋值,采⽤这种⽅式赋值时,等号两边的对象都是元组并且元组的⼩括号是可选的。
通常形式为
x, y, z = 1, 2, 'a string'
等同于 (x, y, z) = (1, 2, 'a string')
这种赋值类型最经常⽤到的环境是变量交换,形如
x, y = y, x
这种交换⽅式⽆需中间变量即可交换两个变量的值。
那么具体实现机制是怎样的呢?
运⾏时,⾸先构造⼀个元组(y, x),然后构造另⼀个元组(x, y),接着⽤元组(y, x)赋值给(x, y),元组赋值过程从左到右,依次进⾏。
假如
x=1,y=2,先令x=y,此时x=2,然后令y=x,y应该等于2?那么就不能实现变量交换了?对于这个问题,应该从元组的特性说起。
x, y, z = 1, 2, 'a string'
tuple = (x, y, z)
变量名x, y, z都是引⽤,内存开辟除了三个空间分别存储1, 2, 'a string',三个变量分别指向这三块地址。
由这三个变量构造的元组tuple,它有三个元素,这三个元素并不是x,y,z这三个变量,⽽是这三个变量所指向的地址空间⾥的内容。
如果此时再另x=4,此时在地址空间会另开辟出⼀块空间存储4,x进⽽指向这块空间,⽽元组内的三个值仍保持不变。
所以对于 x, y = y, x 来说,⾸先由y,x所构成的元组(y,x)其实应该表⽰为(2,1),那么再从左到右赋值,就可以交换变量的值了。