gpt4 book ai didi

python - 为什么在 python 2.7 和 python 3.4 性能中创建类之间存在差异

转载 作者:太空狗 更新时间:2023-10-29 20:30:35 26 4
gpt4 key购买 nike

from timeit import Timer as T

def calc(n):
return T("class CLS(object): pass").timeit(n)

print(calc(90000))
print(calc(90000))
print(calc(90000))

# python3.4
1.1714721370008192
1.0723806529986177
1.111804607000522

# python2.7
15.7533519268
16.7191421986
16.8397979736

为什么使用不同版本的python创建类的时间会有如此大的差异?在同一台机器上测试:

  • i5-3450 CPU @ 3.10GHz
  • 8GB内存

最佳答案

timeit 禁用垃圾收集器,否则会破坏使类对象保持事件状态的循环。因此,在 timeit 完成之前,没有一个类会被释放。

object.__subclasses__() 通过内部弱引用集合引用这些类。 tp_subclasses 的旧的基于列表的实现每次都会搜索整个列表以找到可以替换的无效引用。每增加一个子类,此过程就会花费更多时间。另一方面,3.4中新的基于dict的设计可以在常数时间内添加引用。参见 issue 17936 .


感谢 @MichaelYounkin指出这在 3.2 中也很慢。最初我试图将性能差异缩小到 2.x 和 3.x 之间小对象分配器的变化,但在阅读他的评论后我发现即使是 3.3 也比 3.4 慢得多。所以我扫描了 typeobject.c filelog查看最近的更改。

关于python - 为什么在 python 2.7 和 python 3.4 性能中创建类之间存在差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26713356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com