【发布时间】:2011-12-21 08:59:31
【问题描述】:
简单而简短的问题。在 Python 中交换两个变量非常简单:a, b = b, a。没关系,我没有异议 :) 但我对它在内部的工作方式很感兴趣?它会自己创建一些临时变量还是更有趣(我敢打赌)?
【问题讨论】:
标签: python
简单而简短的问题。在 Python 中交换两个变量非常简单:a, b = b, a。没关系,我没有异议 :) 但我对它在内部的工作方式很感兴趣?它会自己创建一些临时变量还是更有趣(我敢打赌)?
【问题讨论】:
标签: python
Python 源代码在执行前转换为bytecode。您可以通过使用反汇编程序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 会将它们打包成一个(此处为 temporary)“元组”。也许这里不是这种情况,因为在左侧正好有这两个a 和b。这就是说明中没有BUILD_TUPLE的原因吗?