Python交换列表

发布于 2021-01-29 16:27:14

在python中,当我将列表分配给另一个列表时,例如:

a = [1,2,3]
b = a

现在b和一个指向同一列表的点。现在考虑两个清单,

a = [1,2,3]
b = [4,5,6]
a,b = b,a

现在,如何像其他任何数据类型一样交换它们,并且最终不使两者都指向同一列表?

关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    看起来像Python在内部交换项目。检查这个程序

    a, b = [1, 2], [2, 3]
    
    def func():
        a, b = b, a
    
    import dis
    dis.dis(func)
    

    输出量

      4           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
    

    因此,Python的推动 引用
    ba在堆栈LOAD_FAST。因此,现在最上面的元素是所指向的引用a,下一个是所指向的引用b。然后,它用于ROT_TWO交换堆栈的前两个元素。所以,现在,最顶部的元件是由指向的参考b和下一个是基准指出通过a,然后将堆叠的两个元素分配顶部ab分别与STORE_FAST

    当我们处理的项目数小于4时,这就是在赋值语句中进行排序的方式。

    如果项目数大于或等于4 ,它将构建一个元组并解压值。检查这个程序

    a, b, c, d = [1, 2], [2, 3], [4, 5], [5, 6]
    
    def func():
        a, b, c, d  = d, c, b, a
    
    import dis
    dis.dis(func)
    

    输出量

      4           0 LOAD_FAST                0 (d)
                  3 LOAD_FAST                1 (c)
                  6 LOAD_FAST                2 (b)
                  9 LOAD_FAST                3 (a)
                 12 BUILD_TUPLE              4
                 15 UNPACK_SEQUENCE          4
                 18 STORE_FAST               3 (a)
                 21 STORE_FAST               2 (b)
                 24 STORE_FAST               1 (c)
                 27 STORE_FAST               0 (d)
                 30 LOAD_CONST               0 (None)
                 33 RETURN_VALUE
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看