2015年11月17日

ベンチマーク5 append

リストに要素を追加する操作について、ベンチマークを計測します。


リストを作成する操作として、以下の3つを比較します。1番目は標準的な方法、2番目はよく知られた高速化手法、3番めは可読性を重視した手法、となります。

  1. list.append() を呼ぶ
  2. list.append へのショートカットを利用
  3. list += [i] と呼ぶ

ベンチマークのソースコードです。
from benchmarker import Benchmarker

with Benchmarker(1000, cycle=3, extra=1) as bench:
    sample = range(10000)

    @bench("append")
    def _(bm):
        for _ in bm:
            l = list()
            for i in sample:
                l.append(i)

    @bench("shortcut append")
    def _(bm):
        for _ in bm:
            l = list()
            append = l.append
            for i in sample:
                append(i)

    @bench("+= []")
    def _(bm):
        for _ in bm:
            l = list()
            for i in sample:
                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
shortcut append   3.5932  (100.0) ********************
append            5.7150  ( 62.9) *************
+= []             8.6328  ( 41.6) ********

計測結果から、以下のことが言えます。
  • append のショートカット化はかなり有効
  • list += [i] は遅い
append のショートカット化の効果は軽視できないレベルです。そして、クラスメソッドのショートカット化は append 以外でも使えます。メソッドを繰り返し呼ぶ処理では積極的に使っていきたいところです。
list += [i] は、視覚的に分かりやすく個人的には嫌いではないのですが、動作速度の点からはイマイチのようです。

0 件のコメント:

コメントを投稿