Tuple.在Python程式語言中是一個immutable data structure,也可以將它當做是immutable list,也由於它是不可變的,所以它沒有像list擁有的一些append、remove等函式可供使用,那這樣的話為何還需要它呢?大致上有下述三點:
1. 它可以讓程式更具安全性,這裡的安全性指的是它具備不被更改的可能。
2. 由於它是immutable,所以也可以用來當作dictionary的key來使用。
3. 和list相較之下,Tuple在建構時的速度上較快。
下述來看一些實例:
>>> def a(): ... x = [1,2,3] ... >>> def b(): ... x = (1,2,3) ... >>> import dis >>> dis.dis(a) 2 0 LOAD_CONST 1 (1) 3 LOAD_CONST 2 (2) 6 LOAD_CONST 3 (3) 9 BUILD_LIST 3 12 STORE_FAST 0 (x) 15 LOAD_CONST 0 (None) 18 RETURN_VALUE >>> dis.dis(b) 2 0 LOAD_CONST 4 ((1, 2, 3)) 3 STORE_FAST 0 (x) 6 LOAD_CONST 0 (None) 9 RETURN_VALUE
從上述這兩個bytecode instructions來看,在建構Tuple所需要的指令較少,也意謂著在建構時的速度較快,實證如下:
python -m timeit "x=(1,2,3,4,5,6,7,8,9,10)" 10000000 loops, best of 3: 0.0261 usec per loop python -m timeit "x=[1,2,3,4,5,6,7,8,9,10]" 10000000 loops, best of 3: 0.177 usec per loop
透過Tuple大約只耗費了「0.0261 usec」,至於List則需要「0.177 usec」左右~ 但如果比較兩者存取的速度上來看,List會顯得較有效率上的優勢。
python -m timeit -s "x=(1,2,3,4,5,6,7,8,9,10)" "y=x[3]" 10000000 loops, best of 3: 0.0649 usec per loop python -m timeit -s "x=[1,2,3,4,5,6,7,8,9,10]" "y=x[3]" 10000000 loops, best of 3: 0.0584 usec per loop
相關資源