变量交换是如何在内部工作的?

27 投票
1 回答
3301 浏览
提问于 2025-04-17 08:45

这是一个简单又简短的问题。在Python中,交换两个变量非常简单:a, b = b, a。这没问题,我没有异议 :) 但我想知道它是如何在内部工作的?它是自己创建了一个临时变量,还是有更有趣的东西(我敢打赌是这样)?

1 个回答

43

在执行之前,Python 源代码会被转换成 字节码。你可以通过使用反汇编工具 dis 来查看字节码的具体样子,从而了解内部是如何进行交换操作的:

import dis
>>> def f(a,b): a, b = b, a
>>> dis.dis(f)
  1           0 LOAD_FAST                1 (b)
              3 LOAD_FAST                0 (a)
              6 ROT_TWO             
              7 STORE_FAST               0 (a)
             10 STORE_FAST               1 (b)
             13 LOAD_CONST               0 (None)
             16 RETURN_VALUE 

简单来说,它会把变量 a 和 b 的值放到一个堆栈上,然后把堆栈顶部的两个元素交换位置,最后再把这些值取出来。

你还可以查看:

撰写回答