python的元组存储的实质和多元赋值

python中有一种赋值机制即多元赋值,采用这种方式赋值时,等号两边的对象都是元组而且元组的小括号是可选的。一般形式为html

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

 

等同于 (x, y, z) = (1, 2, 'a string') python

这种赋值类型最常常用到的环境是变量交换,形如c++

x, y = y, x

 

这种交换方式无需中间变量便可交换两个变量的值。那么具体实现机制是怎样的呢?spa

运行时,首先构造一个元组(y, x),而后构造另外一个元组(x, y),接着用元组(y, x)赋值给(x, y),元组赋值过程从左到右,依次进行。code

这里有个错误猜想:   假如x=1,y=2,先令x=y,此时x=2,而后令y=x,y应该等于2?  那么就不能实现变量交换了?htm

显然这个猜想是错误的,  对于这个问题,应该从元组的特性提及。对象

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

 

变量名x, y, z都是引用,内存开辟除了三个空间分别存储1, 2, 'a string',三个变量实质是个地址,分别指向这3个内容。blog

可是由这三个变量构造的元组tuple,它有三个元素,这三个元素并非x,y,z这三个变量,  即不是3个地址,而是这三个变量所指向的地址空间里的内容。内存

若是此时再另x=4,此时在地址空间会另开辟出一块空间存储4,x进而指向这块空间,而tuple元组内的x则实质是4。string

因此对于 x, y = y, x 来讲,首先由y,x所构成的元组(y,x)其实应该表示为(2,1),那么再从左到右赋值,就能够交换变量的值了

 

还有一点须要指出, 当咱们使用时,咱们输入tuple[0]等时, 实际上tuple[0]是地址, 可是当咱们输入后再回车,  python自动显示这个地址所显示的内容.

 

多元赋值的补充:

将多个变量同时赋值的方法咱们称为多元赋值(multuple)。将 "mul-tuple"连在一块儿自造的。由于采用这种方式赋值时, 等号两边的对象都是元组。

Python 的多元赋值方式能够实现无需中间变量交换两个变量的值,   这点和c或c++不一样!

python:

#pyhon编写
x, y = 1, 2
print(x,y) x,y=y,x print(x,y)

输出结果:

1 2
2 1

C或C++:

#c+编写
int
x=1; int y=2; print("%d %d",&x,&y); int tmp=x; x=y; y=tmp; print("%d %d",&x,&y);

输出结果:

1 2
2 1

 

原文出处:https://www.cnblogs.com/yinzhi/p/11609025.html

相关文章
相关标签/搜索