Python交换变量等同于C ++ 11 swap? [a,b = b,a]

时间:2017-04-04 22:56:16

标签: python swap

交换变量的一种非常巧妙的方法是:

a,b = b,a

我很好玩,所以我用dis模块调试了它,看到“ROT_TWO”指令。 ROT_TWO是否表示没有复制数据但只交换了指针?基本上与 std :: move 相同?根据“dis”文档:

  

ROT_TWO:交换两个最顶层的堆栈项目。

在同一堆栈上a,b的上下文是什么?

代码:

import dis
def swap():
    a = 1
    b = 2
    a, b = b, a

dis.dis(swap)

输出:

3           0 LOAD_CONST               1 (1)
              3 STORE_FAST               0 (a)

  4           6 LOAD_CONST               2 (2)
              9 STORE_FAST               1 (b)

  5          12 LOAD_FAST                1 (b)
             15 LOAD_FAST                0 (a)
             18 ROT_TWO             
             19 STORE_FAST               0 (a)
             22 STORE_FAST               1 (b)
             25 LOAD_CONST               0 (None)
             28 RETURN_VALUE        

0 个答案:

没有答案