概要
以下、自分用のメモです。
以下のツイート(Xになったので今は何て呼ぶのでしょう??)を見つけました。
a=a+b and a+=b are not always same in Python#python #programming #developer #morioh #programmer #softwaredeveloper #computerscience #webdev #webdeveloper #webdevelopment #pythonprogramming #pythonquiz #ai #ml #machinelearning #datascience pic.twitter.com/yFeQy9UPg3
— Python Developer (@Python_Dv) 2023年10月5日
面白いですね。__add__
と __iadd__
の違いでこのようになるという意味ですね。
ちなみに、__iadd__
の方は元のリストを変更するので、ベンチマークをとるとこちらの方が速いです。
試してみる
dunder_add.py
#!/usr/bin/env python def main(): a = [1, 2] for i in range(30000): a = a + [i] if __name__ == '__main__': main()
dunder_iadd.py
#!/usr/bin/env python def main(): a = [1, 2] for i in range(30000): a += [i] if __name__ == '__main__': main()
測定は hyperfineを使いました。
$ hyperfine "python dunder_add.py" "python dunder_iadd.py" Benchmark 1: python dunder_add.py Time (mean ± σ): 1.049 s ± 0.066 s [User: 0.849 s, System: 0.200 s] Range (min … max): 0.977 s … 1.205 s 10 runs Benchmark 2: python dunder_iadd.py Time (mean ± σ): 14.0 ms ± 1.2 ms [User: 12.1 ms, System: 1.9 ms] Range (min … max): 12.3 ms … 22.3 ms 211 runs Summary python dunder_iadd.py ran 74.83 ± 7.77 times faster than python dunder_add.py
参考情報
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場