变量交换是如何在内部工作的?
这是一个简单又简短的问题。在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 的值放到一个堆栈上,然后把堆栈顶部的两个元素交换位置,最后再把这些值取出来。
你还可以查看: