2007-07-19

[メモ] ちょっとやそっとでは、Python nativeのlistには勝てないことがわかった

C++のstd::vectorを、std::vector<PyObject*>として、Python拡張に仕立て上げて、Python nativeのlistと対決させてみた。
結果、圧倒的にPythonのlistの勝利↓


>>> t = timeit.Timer("for i in xrange(10000): ap(1)", "import vecpy; v = vecpy.vecpy(); v.reserve(10000); ap = v.append")
>>> print t.timeit(number=100)
0.235954046249
>>> t2 = timeit.Timer("for i in xrange(10000): ap(1)", "v = []; ap = v.append")
>>> print t2.timeit(number=100)
0.115885019302


std::vectorのreserveメソッド、いけると思ってたんだけどなあ。
Python拡張を呼び出すオーバーヘッドがなんか特別にあるってことだろうか。