Pyhton变量变换原理

我们在C语言中实现变量交换,往往会使用到通过中间变量来交换两个变量的值:

tmp = x;
x = y;
y = tmp;

而在python中,则无需中间变量即可实现:

x , y = y, x

看起来很神奇,那么具体实现机制是什么呢?
将这个之前,我们先来了解python的多元赋值机制(《python核心编程3.2》)。通常形式是这样的:

x, y , z = 1, 2, 'a string'

采取这种方式的赋值是,等号两边的对象其实都是元祖,即:

(x, y, z) = (1, 2, 'a string')

变量名x, y, z都是引用,内存开辟除了三个空间分别存储1, 2, 'a string',三个变量分别指向这三块地址。由这三个变量构造的元组tuple,它有三个元素,这三个元素并不是x,y,z这三个变量,而是这三个变量所指向的地址空间里的内容。如果此时再另x=4,此时在地址空间会另开辟出一块空间存储4,x进而指向这块空间,而元组内的三个值仍保持不变。
接着我们来解读x, y = y, x, 同样, 它等价于(x, y) = (y, x)。
运行时,首先构造一个元组(y, x),然后构造另一个元组(x, y),接着用元组(y, x)赋值给(x, y),元组赋值过程从左到右,依次进行。假如x=1,y=2,先令x=y,此时x=2,然后令y=x,y等于1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值