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

我发现一个类的创建方式比类的实例化更慢。

>>> from timeit import Timer as T

>>> def calc(n):

... return T("class Haha(object): pass").timeit(n)

<>

>>> calc(9000)

15.947055101394653

>>> calc(9000)

17.39099097251892

>>> calc(9000)

18.824054956436157

>>> calc(9000)

20.33335590362549

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

和这个:

>>> T("type('Haha', b, d)", "b = (object, ); d = {}").timeit(9000)

给出类似的结果。

但实例化不会受到影响:

>>> T("Haha()", "class Haha(object): pass").timeit(5000000)

0.8786070346832275

5000000个实例在少于1秒内。

什么使创作这昂贵?

为什么创建过程变得更慢?

编辑:

如何复制:

开始一个新的python过程,初始几个“calc(10000)”给我一个数字0.5在我的机器上。并尝试一些较大的值,calc(100000),它不能结束甚至10秒,中断它,和calc(10000),给一个15秒。

编辑:

附加事实:

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

>>> from a import calc

>>> calc(10000)

0.4673938751220703

>>> calc(10000)

0.4300072193145752

>>> calc(10000)

0.4270968437194824

>>> calc(10000)

0.42754602432250977

>>> calc(10000)

0.4344758987426758

>>> calc(100000)

^CTraceback (most recent call last):

File "", line 1, in

File "a.py", line 3, in calc

return T("class Haha(object): pass").timeit(n)

File "/usr/lib/python2.7/timeit.py", line 194, in timeit

timing = self.inner(it, self.timer)

File "", line 6, in inner

KeyboardInterrupt

>>> import gc

>>> gc.collect()

234204

>>> calc(10000)

0.4237039089202881

>>> calc(10000)

1.5998330116271973

>>> calc(10000)

4.136359930038452

>>> calc(10000)

6.625348806381226

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值