【Python】真偽値は「1/0」と「True/False」で処理速度が変わるのか?

このページには広告が含まれています。
AD

if文などで処理を分岐させたいときに判定として真偽値を使うことがありますが、このとき「1と0」で書く派と「TrueとFalse」で書く派に分かれるのではないでしょうか。私は「1と0」派ですが「TrueとFalse」で書く方が可読性が改善しそうだなぁと思うときがあります。

1文字から4~5文字入力しなければならなくなるため手間が増えてしまいますが、そもそもとしてこの2つは本当に全く同じ速度で処理してくれるのかという疑問があります。

いくら可読性が上がっても実行速度に影響があるのであればあまり採用したくはありません。そこで簡単なコードを作成して処理速度を検証してみることにしました。

検証方法はfor文内に「1」「0」「True」「False」それぞれを条件式にしたif文を記述したうえで、1000万回ループする処理を1万回実行して処理時間の最大値・最小値・平均値・中央値を計測しました。

if 1:
    pass

if 0:
    pass

if True:
    pass

if False:
    pass
AD

検証結果

10TrueFalse
最大値1.115685299970210.9324452998116610.9913635000120851.01934670004994
最小値0.4930495999287810.4856203000526870.5196975001599640.503387300064787
平均値0.5991090818501310.5477944438695210.5946747193204470.57190826876096
中央値0.5790656000608580.5361605000216510.5812135000014680.559252750012092

まず「1」と「True」は条件一致してif文に入るので、「0」「False」と比べて処理に時間がかかってしまうのは間違いないです。その上でこの2つはほとんど重なり合っていることから処理速度に違いがないことが分かります。

一方で「0」と「False」には何故か若干のズレが発生しており、平均値ベースで約1.044倍の差があります。なぜこうなったのかを調べてみたりAIに考察してもらったところ、恐らく実行環境や検証コードの記述方法による問題の可能性が高いのではないかという予想に落ち着きました。

一応、int型とbool型という違いがあるのでなんらかの変化が発生する可能性を考えていましたが特にそんなことはなかったみたいです。

なので気にせず好きな方を使えばいいのではないかというのが一先ずの結論になります。

コメント