blog.Ring.idv.tw

淺談Tuple

淺談Tuple


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

相關資源

Are tuples more efficient than lists in Python?

32.12. dis — Disassembler for Python bytecode

2009-08-23 17:11:13

Leave a Comment

Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: Ads :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment