天天看点

python交换两个值原理_Python交换两个数为什么不需要使用中间变量,底层原理是什么,是使用的位运算吗?...

Python的变量并不直接存储值,而只是引用一个内存地址,交换变量时,只是交换了引用的地址。

>>> def func():

... a,b = b,a

...

>>> import dis

>>> dis.dis(func)

2 0 LOAD_FAST 0 (b)

3 LOAD_FAST 1 (a)

6 ROT_TWO

7 STORE_FAST 1 (a)

10 STORE_FAST 0 (b)

13 LOAD_CONST 0 (None)

16 RETURN_VALUE

可以看出主要是ROT_TWO指令的功劳:

查阅python文档可以知道有ROT_TWO ROT_THREE ROT_FOUR这样的指令,可以直接交换两个变量、三个变量、四个变量的值

在python3.4的源码中查阅ceval.c文件可以看到:

TARGET(ROT_TWO) {

PyObject *top = TOP();

PyObject *second = SECOND();

SET_TOP(second);

SET_SECOND(top);

FAST_DISPATCH();

}

TARGET(ROT_THREE) {

PyObject *top = TOP();

PyObject *second = SECOND();

PyObject *third = THIRD();

SET_TOP(second);

SET_SECOND(third);

SET_THIRD(top);

FAST_DISPATCH();

}