petitviolet_blog

@petitviolet blog

値を1大きくする速さ

正直どうでもいい上にめっっっちゃ簡単なことを調べてみたので一応.

調べたこと

例えば今 n = 1 として, n に 2 をしたい時に

n += 1

とするべきか,

n = 2

とするべきか.

調べ方

変数を1増やしたい時にどっちがいいかを判定するために,

  1. pass(何もしない)
  2. 1大きい値を代入していく
  3. 1足していく

の3通りで10億回for文を回すのにかかる時間を調べた.

環境

プロセッサ:2.13GHz Intel Core 2 Duo
メモリ:4GB
Python:2.7.2

今回作ったコード(t.py)

# -*- encoding:utf-8 -*-
import sys
N = 100000000

def n0():
    global N
    n = 0
    for i in xrange(N):
        pass
    return i

def n1():
    global N
    n = 0
    for i in xrange(N):
        n = i
    return n

def n2():
    global N
    n = 0
    for i in xrange(N):
        n += 1
    return n

def main():
    if sys.argv[0] == 'time':
        select = int(sys.argv[2])
    else:
        select = int(sys.argv[1])
    if select == 0:
        print '何もしないと',
        num = n0()
    elif select == 1:
        print '代入していくと',
        num = n1()
    elif select == 2:
        print '足していくと',
        num = n2()

if __name__ == '__main__':
    main()

ちなみにこのコードだと,
1足していった時だけ結果が1大きくなるのですが,
計算する回数は同じなので問題ないです.

何もしない時

$ time python t.py 0
何もしないと

real    0m3.001s
user    0m2.977s
sys     0m0.019s

ふむふむ.

代入していく時

$ time python t.py 1
代入していくと

real    0m4.410s
user    0m4.365s
sys     0m0.020s

なるほど.

1足していく時

$ time python t.py 2
1足していくと

real    0m7.322s
user    0m7.272s
sys     0m0.025s

おお!

ということで

値を1増やすだけなら1足すよりも代入したほうがいいですよ,
ということでした.
...確かめるまでもなく当たり前ですけどねww
本当はインクリメントと代入で比較したかったのですが,
Pythonにはインクリメント演算子が無いので.