在Python中有没有标准的方法交换两个变量?
在Python中,我见过用这种语法来交换两个变量的值:
left, right = right, left
这算不算是交换两个变量值的标准方法呢?还是说还有其他更常用的方式来交换两个变量的值?
8 个回答
44
我知道三种交换变量的方法,但 a, b = b, a
是最简单的。下面介绍一下其他方法:
异或交换(适用于整数)
x = x ^ y
y = y ^ x
x = x ^ y
或者简洁地说,
x ^= y
y ^= x
x ^= y
临时变量
w = x
x = y
y = w
del w
元组交换
x, y = y, x
135
没错,这就是交换两个变量的标准方法。
537
在Python中,表达式是从左到右进行计算的。需要注意的是,在进行赋值时,右边的内容会先被计算,然后才是左边的内容。
对于表达式 a,b = b,a
,这意味着:
- 首先,右边的
b,a
会被计算,也就是说,程序会在内存中创建一个包含两个元素的元组。这两个元素分别是之前已经存在的b
和a
。 - 在创建这个元组之后,虽然还没有把这个元组赋值给左边的变量,但这没关系,Python内部知道这个元组的位置。
- 接着,左边的内容会被计算,也就是说,元组会被赋值给左边的变量。
- 因为左边有两个变量,所以这个元组会被拆开,第一个变量
a
会被赋值为元组的第一个元素(这个元素原本是 b,在交换之前它的名字是b
),
而第二个变量b
会被赋值为元组的第二个元素(这个元素原本是 a,在交换之前它的名字是a
)。
这个机制实际上完成了对变量 a
和 b
所指向对象的交换。
所以,回答你的问题:是的,这是一种标准的交换两个变量所指向对象的方法。
顺便说一下,这里的对象不是变量,而是对象本身。