两次性能测试的奇怪结果

Weird results of two performance tests

对于一些性能关键代码,我正在做非常基本的性能测试,以确定什么是慢的,什么是快的。请原谅我糟糕的计时方法,因为我基本上不知道自己在做什么。考虑这两个函数:

>>> def testOneBillion():
    a = 0
    print(f'[{datetime.datetime.now()}] Start')
    for i in range(1_000_000_000):
        a = i
    print(f'[{datetime.datetime.now()}] End')

    
>>> testOneBillion()
[2021-04-17 17:25:19.126744] Start
[2021-04-17 17:25:33.370225] End

>>> def testTenBillion():
    a = 0
    print(f'[{datetime.datetime.now()}] Start')
    for i in range(10_000_000_000):
        a = i
    print(f'[{datetime.datetime.now()}] End')

>>> testTenBillion()
[2021-04-17 17:26:10.545044] Start
[2021-04-17 17:37:01.154828] End

有谁知道为什么 testTenBilliontestOneBillion 花费 十倍多 才能完成?我本来期望线性性能缩放,并且之前的每个范围增量都呈线性行为。可能是什么原因造成的?

您问题下的评论可能是正确的。如果我理解正确的话,Python 的标准整数格式最多可以包含 2.147483647 亿的数字。

来源:https://python-reference.readthedocs.io/en/latest/docs/ints/

编辑:我用 20 亿测试了循环,它只比 10 亿长了 2.1 倍,这为该理论提供了可信度。