10

私は自分のコードからもう少しパフォーマンスを絞り出そうとしています。最近、この Python wiki ページを閲覧しているときに、次の主張を見つけました。

複数の割り当ては、個別の割り当てよりも遅くなります。たとえば、「x,y=a,b」は「x=a; y=b」よりも遅くなります。

好奇心が強い、私はそれをテストしました(Python 2.7で):

$ python -m timeit "x, y = 1.2, -1.4"
10000000 loops, best of 3: 0.0365 usec per loop

$ python -m timeit "x = 1.2" "y = -1.4"
10000000 loops, best of 3: 0.0542 usec per loop

順序を変えて何度か繰り返しましたが、複数の割り当てスニペットは、個別の割り当てよりも一貫して少なくとも 30% 優れたパフォーマンスを発揮しました。明らかに、変数の割り当てを含むコードの部分が重大なボトルネックの原因になることはありませんが、それでも私の好奇心は刺激されます。ドキュメントが別の方法で提案しているのに、なぜ複数の代入は個々の代入より明らかに速いのですか?

編集:

2 つ以上の変数への代入をテストしたところ、次の結果が得られました。

傾向はほぼ一貫しているようです。誰でも再現できますか?

(CPU: インテル Core i7 @ 2.20GHz)

4

2 に答える 2

4

興味深いことに、CPU にある程度依存する可能性があります。これらは両方とも 64 ビットの Linux マシンです (同じ Python ビルド)。

Intel(R) Core(TM)2 Duo CPU T7300 @ 2.00GHz の結果

$ python -V
Python 2.7.5+
$ python -m timeit "x, y = 1.2, -1.4"
10000000 loops, best of 3: 0.0554 usec per loop
$ python -m timeit "x = 1.2" "y = -1.4"
10000000 loops, best of 3: 0.0349 usec per loop

Intel(R) Pentium(R) CPU G850 @ 2.90GHz の結果

$ python -V
Python 2.7.5+
$ python -m timeit "x, y = 1.2, -1.4"
10000000 loops, best of 3: 0.0245 usec per loop
$ python -m timeit "x = 1.2" "y = -1.4"
10000000 loops, best of 3: 0.0394 usec per loop
于 2014-03-09T05:28:56.087 に答える