Python Program to Swap Variables Without Temporary Variable?


Python中可以通过以下的方式交换两个变量:
x,y = y,x


请问如果x,y是两个字符串的话,Python内部实现的时候使用了何种方法?是否真的没有通过使用临时变量?
已邀请:

RobberPhex - 学生

赞同来自: sumnous 春越 richardzrc


Python中的字符串也好,数值类型也罢,都是一个PyObject指针。

接下来问题就在于,如何交换指针:

dis一下:
    \>\>\> dis("x,y = y,x")
      1           0 LOAD_NAME                0 (y)
                  3 LOAD_NAME                1 (x)
                  6 ROT_TWO
                  7 STORE_NAME               1 (x)
                 10 STORE_NAME               0 (y)
                 13 LOAD_CONST               0 (None)
                 16 RETURN_VALUE


LOAD_NAME之后(LOAD_NAME是无法避免的,基本每一句都要这个字节码的),使用了ROT_TWO来交换。
问题是,ROT_TWO是怎么实现的?
看CPython的实现:
    TARGET(ROT_TWO) {
        PyObject *top = TOP();
        PyObject *second = SECOND();
        SET_TOP(second);
        SET_SECOND(top);
        FAST_DISPATCH();
    }


好吧,它用了两个临时变量……

要回复问题请先登录注册