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
相關資源
