简单而短的问题。在Python中交换两个变量非常容易:a, b = b, a
。这很好,我没有异议 :) 但我想知道它是如何在内部工作的?它是否会自己创建一些临时变量,还是有更有趣的东西发生了(我打赌是这样的)?
简单而短的问题。在Python中交换两个变量非常容易:a, b = b, a
。这很好,我没有异议 :) 但我想知道它是如何在内部工作的?它是否会自己创建一些临时变量,还是有更有趣的东西发生了(我打赌是这样的)?
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的值推到堆栈上,交换堆栈顶部的两个元素,然后再弹出这些值。
另请参见:
,
时,Python会将它们打包成一个(这里是临时的)“元组”。也许这里不是这种情况,因为左边恰好有这两个a
和b
。这就是指令中没有BUILD_TUPLE
的原因吗? - S.B