Swap

虽然Python是继承于C的,但是Python的数值交换并不是像C/C++那样利用引用交换,而是在程序栈里通过机器码完成的,下面这段代码可以看出原理(可能是Python3的代码)

>>> dis.dis('a, b = b, a')
  1           0 LOAD_NAME                0 (b)
              3 LOAD_NAME                1 (a)
              6 ROT_TWO
              7 STORE_NAME               1 (a)
             10 STORE_NAME               0 (b)
             13 LOAD_CONST               0 (None)
             16 RETURN_VALUE
  • 首先将变量 b 的值推入栈

  • 然后将变量 a 的值推入栈

  • 交换栈顶的两元素(结果是 b 的值位于栈顶)

  • 栈顶的值(b)赋值给变量 a

  • 栈顶的值(a)赋值给变量 b

results matching ""

    No results matching ""