我相信python中的拼接列表总是会创建列表的浅表副本。但是,对于拼接分配,这仍然适用吗?
例如:
list[::10] = list[10:20]
list [:: 10]会创建一个新列表吗?如果我的理解是正确的,列表[:: 10]不使用任何空格,但列表[10:20]通过创建新列表来使用空格
答案 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实现/版本可能会有所不同。