列出拼接分配空间复杂度?

时间:2017-11-06 01:18:02

标签: python-3.x

我相信python中的拼接列表总是会创建列表的浅表副本。但是,对于拼接分配,这仍然适用吗?

例如:

list[::10] = list[10:20]

list [:: 10]会创建一个新列表吗?如果我的理解是正确的,列表[:: 10]不使用任何空格,但列表[10:20]通过创建新列表来使用空格

1 个答案:

答案 0 :(得分:2)

使用dis我们可以看看Python解释器实际上将我们的代码解释为什么。

from dis import dis

dis('l[::10] = l[10:20]')

给我们

  1           0 LOAD_NAME                0 (l)
              3 LOAD_CONST               0 (10)
              6 LOAD_CONST               1 (20)
              9 BUILD_SLICE              2
             12 BINARY_SUBSCR
             13 LOAD_NAME                0 (l)
             16 LOAD_CONST               2 (None)
             19 LOAD_CONST               2 (None)
             22 LOAD_CONST               0 (10)
             25 BUILD_SLICE              3
             28 STORE_SUBSCR
             29 LOAD_CONST               2 (None)
             32 RETURN_VALUE

我们可以看到有两个BUILD_SLICE操作,一个用于l[::10],另一个用于l[10:20]。因此,两个切片都由对象在内存中表示。

编辑:

值得注意的是,这是CPython 3.5的反汇编字节码

CPython是"标准"实现,但其他Python实现/版本可能会有所不同。