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

时间:2011-12-21 08:59:32

标签: python

简单而简短的问题。在Python中交换两个变量非常简单:a, b = b, a。没关系,我没有异议:)但我对内部的工作方式感兴趣吗?它是自己创建一些临时变量还是更有趣(我敢打赌)?

1 个答案:

答案 0 :(得分:34)

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的值,旋转(交换)前两个元素,然后再次弹出值。

另见: