2017-11-06 7 views
2

私は、Pythonのスプライシングリストは、常にリストの浅いコピーを作成すると信じています。しかし、スプライスの課題に対してこれはまだ成立していますか?例えばスプライス割り当ての複雑さをリストしますか?

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

リスト[:: 10]は、新しいリストを作成していますか?私の理解が正しいならリスト[:: 10]はスペースを使いませんがリスト[10:20]はスペースを使用して新しいリストを作成します

答えて

0

disを使うと、Pythonインタプリタが実際にコードを解釈しているに。

from dis import dis 

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

我々は2つのBUILD_SLICE操作、l[10:20]ためl[::10]用とその他があることがわかります、私たちに

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 

を与えます。したがって、両方のスライスはオブジェクトによってメモリに表されます。

編集:

それは、これはCPythonの3.5

CPythonのために分解バイトコードである「標準」の実装ですが、他のPython実装/バージョンが異なる可能性があることは注目に値します。

関連する問題