码迷,mamicode.com
首页 > 其他好文 > 详细

变量交换x,y=y,x实现机制--元组

时间:2015-03-05 21:00:34      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

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),那么再从左到右赋值,就可以交换变量的值了。

变量交换x,y=y,x实现机制--元组

标签:

原文地址:http://www.cnblogs.com/north-north/p/4316656.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!