<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),那么再从左到右赋值,就可以交换变量的值了。
<python 深入理解>变量交换x,y=y,x实现机制--元组的更多相关文章
- python变量交换及注释种类,注释注意事项/注释排查方法
#小练习作业 # texe1 = '能提笔安天下' # print(texe1) # string1 = '武能上' # string2 = '定乾坤' # print(string1,string2 ...
- Python两个变量的值进行交换的方法
Python两个变量的值进行交换的方法 使用第三方变量: '''这是第一种赋值方法,采用第三方变量''' c = a a = b b = c 使用两个变量: '''使用两个变量''' a = a+b ...
- Python 变量交换
# coding = utf-8 a, b = 1, 2 print 'before change' print a, b a, b = b, a print 'after change' print ...
- 跟哥一起学python(3)- 理解“变量”
我们把前面的程序稍微改一下,来了解python中的变量. # file: ./4/4_1.py # 定义变量 hello_str = "hello, world!" # 字符串打印 ...
- Python 中的变量还能这样理解(白话)
一.案例分析 1.思考 计算软件测试大佬柠檬小姐姐,每月能存多少钱 # 计算软件测试大佬柠檬小姐姐,每月能存多少钱 # 坐标:深圳 # 2018年1月份 # 房租水电 4000元 # 伙食费 1000 ...
- Python基础(4) - 变量
Python 命名规则: 变量名必须是字母或者_开头. 变量名的其他部分可以是字母,_或者数字. Python是大小写敏感的. 以下划线开头的标识符是有特殊意义: 以单下划线开头(_foo)的代表不能 ...
- python 深入理解 赋值、引用、拷贝、作用域
在 python 中赋值语句总是建立对象的引用值,而不是复制对象.因此,python 变量更像是指针,而不是数据存储区域, 这点和大多数 OO 语言类似吧,比如 C++.java 等 ~ 1.先来看个 ...
- Python学习教程(learning Python)--2.2 Python下的变量基础
变量的基本概念,变量可以这样去理解,变量是一个值,这个值存储在计算机的内存里.以 网购为例,您在选购傻商品的时候,是在不同页面里选不同的商品,选好一件点击“放入购物车”,选完了再点击去结帐,这些商品的 ...
- Python学习入门基础教程(learning Python)--2.2 Python下的变量基础
变量的基本概念,变量可以这样去理解,变量是一个值,这个值存储在计算机的内存里.以网购为例,您在选购傻商品的时候,是在不同页面里选不同的商品,选好一件点击“放入购物车”,选完了再点击去结帐,这些商品的价 ...
随机推荐
- MVC5 + EF6 简单示例
本文所使用的软件及环境: Visual Studio Ultimate 2013 (下载地址:http://www.visualstudio.com/downloads/download-visual ...
- iperf交叉编译:
下载:http://sourceforge.net/projects/iperf 1. 先把iperf-2.0.4.tar.gz解压到你的目录下.2. cd iperf-2.0.43. ./confi ...
- ubuntu下安装JDK并搭建activeMQ
1.安装JDK,网上有人说activeMQ支持持JDK1.7及以上版本,未实际测试,保险起见我这里直接安装JDK1.7. #apt-get install openjdk--jdk 2.设置环境变量 ...
- Java项目多数据源配置
由于种种原因,有的时候可能要连接别人的数据库,或者不同的数据库没法自动转换,重构起来数据量又太大了,我们不得不在一个项目中连接多个数据源.从网上找了各种资料,只有这位大神给出的解决方案一下子就成功了. ...
- sdn
#!/usr/bin/env python #from mininet.cli import CLI #from mininet.link import Link #from mininet.net ...
- ELK初步实践
ELK是一个日志分析和统计框架,是Elasticsearch.Logstash和Kibana三个核心开源组件的首字母缩写,实践中还需要filebeat.redis配合完成日志的搜集. 组件一览 名称 ...
- VBS整人代码
记得刚开始学VB脚本语言的时候,写了一段调用系统进程的代码,挺好的: dim wshif msgbox("笑笑很帅",vbyesno,"请回答是或否")=vby ...
- C++知识库
C++知识库 秒杀多线程 .
- kali Linux添加add-apt-repository
Debian让用户可以通过一个名为add-apt-repository的应用程序,添加和使用PPA软件库,不过Kali Linux在其默认的程序包列表中并不含有该应用程序.就Kali而言,由于这是个特 ...
- 安装composer
按照composer官网的指导,运行下列命令:curl -sS https://getcomposer.org/installer | php长时间无反应.手动安装1.下载installer# wge ...