交换变量的一种非常巧妙的方法是:
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