加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python 3中的类实例化比Python 2慢

发布时间:2020-12-16 23:46:50 所属栏目:Python 来源:网络整理
导读:我偶然注意到,在Python 2.7和3.5中,从大型数据文件生成类的简单程序运行速度要快得多.我读到here使用“无限精度”整数是简单枚举减速的原因,但即使我尝试实例化这个类的简单测试,我发现Python 3明显变慢了: class Benchmark(object): def __init__(self): s

我偶然注意到,在Python 2.7和3.5中,从大型数据文件生成类的简单程序运行速度要快得多.我读到here使用“无限精度”整数是简单枚举减速的原因,但即使我尝试实例化这个类的简单测试,我发现Python 3明显变慢了:

class Benchmark(object):
    def __init__(self):
        self.members = ['a','b','c','d']


def test():
    test = Benchmark()

if __name__ == '__main__':
    import timeit
    print(timeit.timeit("test()",setup="from __main__ import test"))

我想也许这与每个类实例的大小有关,但Python 3实例小于2(56对64)

$python3 benchmarks.py
0.7017288669958361
$python benchmarks.py
0.508942842484

我已尝试过很多关于这个主题的变体,包括在不同的机器上使用3.4,并且仍然得到相同的结果.有什么想法发生了什么?

最佳答案
你没有测量类实例化时间,你正在测量类实例化,加上赋值,加上列表创建,…

这是一个正确的基准:

$python -m timeit -s 'class C(object): pass' 'C()'
10000000 loops,best of 3: 0.0639 usec per loop
$python3 -m timeit -s 'class C(object): pass' 'C()'
10000000 loops,best of 3: 0.0622 usec per loop

正如您所看到的,Python 3的速度要快得多.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读