小编Pro*_*ton的帖子

为什么在Python中创建一个类比实例化一个类要慢得多?

我发现类的创建比实例化类慢.

>>> from timeit import Timer as T
>>> def calc(n):
...     return T("class Haha(object): pass").timeit(n)

<<After several these 'calc' things, at least one of them have a big number, eg. 100000>>

>>> calc(9000)
15.947055101394653
>>> calc(9000)
17.39099097251892
>>> calc(9000)
18.824054956436157
>>> calc(9000)
20.33335590362549
Run Code Online (Sandbox Code Playgroud)

是的,创建9000个类需要16秒,并且在后续调用中变得更慢.

还有这个:

>>> T("type('Haha', b, d)", "b = (object, ); d = {}").timeit(9000)
Run Code Online (Sandbox Code Playgroud)

给出类似的结果.

但实例化不会受到影响:

>>> T("Haha()", "class Haha(object): pass").timeit(5000000)
0.8786070346832275
Run Code Online (Sandbox Code Playgroud)

在不到一秒的时间内完成5000000个实例.

是什么让这个创作变得昂贵?

为什么创作过程会变慢?

编辑:

如何重现:

开始一个新的python进程,最初的几个"calc(10000)"在我的机器上给出了0.5的数字.并尝试一些更大的值,calc(100000),它甚至不能以10秒结束,中断它,并且计算(10000),给出15秒.

编辑:

其他事实:

如果你在'calc'变慢后gc.collect(),你可以在开始时获得'正常'的速度,但是后续调用的时间会增加

>>> from a import calc
>>> …
Run Code Online (Sandbox Code Playgroud)

python performance memory-management class

28
推荐指数
3
解决办法
6625
查看次数

标签 统计

class ×1

memory-management ×1

performance ×1

python ×1