2016年4月25日

ベンチマーク13 tupleとlist(2)

tuple と list の動作速度について比較します。ここでは、tuple と list の要素へのアクセスにかかる速度を比較します。


ベンチマークのソースコードです。
for文で直接回すパターンと、[i]経由でアクセスするパターンについてそれぞれ計測します。

from benchmarker import Benchmarker

with Benchmarker(10000000, width=20, cycle=3, extra=1) as bench:
    @bench("tuple for")
    def _(bm):
        t = (1, 2, 3)
        for _ in bm:
            for i in t:
                pass

    @bench("list for")
    def _(bm):
        l = [1, 2, 3]
        for _ in bm:
            for i in l:
                pass

    @bench("tuple [i]")
    def _(bm):
        t = (1, 2, 3)
        for _ in bm:
            for i in range(len(t)):
                t[i]

    @bench("list [i]")
    def _(bm):
        l = [1, 2, 3]
        for _ in bm:
            for i in range(len(l)):
                l[i]

計測結果です。
## benchmarker:         release 4.0.1 (for python)
## python version:      3.4.0
## python compiler:     MSC v.1600 32 bit (Intel)
## python platform:     Windows-8-6.2.9200
...

## Ranking      real
list for      5.4142  ( 29.0) ******
tuple for     5.5591  ( 28.2) ******
list [i]     25.0635  (  6.3) *
tuple [i]    25.2364  (  6.2) *

計測結果では list へのアクセスの方が高速となりました。
しかし、その差は僅かであり、実際 tuple の方が高速な回もありました。なので、アクセス速度に関しては tuple と list で同等と見なす方が良さそうです(最低限、アクセス速度を意識して tuple を一旦 list に変換する、というような処理は行うべきではありません)。

0 件のコメント:

コメントを投稿