【发布时间】:2014-12-30 01:22:03
【问题描述】:
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调用gc.disable()。由于类总是会产生很多循环,因此禁用收集器意味着每个CLS实例都不能被释放。您可以通过调用gc.get_objects()获取跟踪对象的列表。如果您不禁用 GC,而只是将每个CLS实例附加到列表以保持引用,则性能相似。看起来令人困惑的是为什么_PyObject_GC_Malloc在这种情况下对于 Python 2 的表现要差得多。 -
使用您的代码 sn-p,我在 Python 2.7.3 中得到 10.4693160057,在 Python 3.2.3 中得到 10.087862968444824。通过删除“对象”,我在 Python 2.7.3 中得到了 0.0276899337769。所以“对象”不太可能与它有任何关系。 Python 3.2 和 Python 3.4 之间一定有性能改进,这会有所不同。 Python 版本之间的类创建时间似乎也有很多细微差别,因此可能无法将其缩小到单个更改。
-
你可能想看看dis模块,看看操作上有什么不同。
标签: python performance python-2.7 python-3.x