在Python中有没有标准的方法交换两个变量?

451 投票
8 回答
326997 浏览
提问于 2025-04-17 15:37

在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中,表达式是从左到右进行计算的。需要注意的是,在进行赋值时,右边的内容会先被计算,然后才是左边的内容。

Python文档:计算顺序

对于表达式 a,b = b,a,这意味着:

  • 首先,右边的 b,a 会被计算,也就是说,程序会在内存中创建一个包含两个元素的元组。这两个元素分别是之前已经存在的 ba
  • 在创建这个元组之后,虽然还没有把这个元组赋值给左边的变量,但这没关系,Python内部知道这个元组的位置。
  • 接着,左边的内容会被计算,也就是说,元组会被赋值给左边的变量。
  • 因为左边有两个变量,所以这个元组会被拆开,第一个变量 a 会被赋值为元组的第一个元素(这个元素原本是 b,在交换之前它的名字是 b),
    而第二个变量 b 会被赋值为元组的第二个元素(这个元素原本是 a,在交换之前它的名字是 a)。

这个机制实际上完成了对变量 ab 所指向对象的交换。

所以,回答你的问题:是的,这是一种标准的交换两个变量所指向对象的方法。
顺便说一下,这里的对象不是变量,而是对象本身。

撰写回答