|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 mumudontcry 于 2014-9-20 00:27 编辑
上讲的循环列表有以下一些元素:
L[0]=1
L[1][0]=1
L[1][1][0]=1
......如图所示:
注意,从第一个开始数起,就是上面的一串元素!
中间没有L[1],L[1][1]……
是不是很神奇,循环列表?
好,这一讲继续讲垃圾回收机制
还记得垃圾回收机制的两个缺点么?一个是消耗额外的资源,一个是会因为产生循环而回收不了,上一讲说的是第二个,那么咱们这一讲说一说第一个
官方对垃圾回收机制的叙述里,python会触发垃圾回收机制有以下两个条件:
1、用户显式调用gc.collect()
2、每次Python为新对象分配内存时,检查threshold阀值,当对象数量超过threshold设置的阀值就开始进行垃圾回收
以下是别人的一组测试数据,木木引用(读作:chaoxi)下
data =range(1,5000000)
dic=dict(zip(data,data))
作者说用time python test.py运行会得
- real 0m39.066s
- user 0m26.422s
- sys 0m12.313s
嗯……这个指令是linux下的指令,win下我试过了不行0 0
然后是把垃圾回收机制关闭之后
import gc
gc.disable()
data=range(1,5000000)
dic=dict(zip(data,data))
gc.enable()
此时,结果是:
- real 0m2.760s
- user 0m1.208s
- sys 0m1.532s
明显加快了许多!
嗯……上面的程序没有看不懂的吧?第一句表示data从1到5000000赋值,第二句表示,把所有的(data,data)放到字典里
也就是说,只要在可能的程序段里,先把垃圾回收机制关闭,然后再开启,就可以加快程序的运行,减少资源消耗
之所以垃圾回收机制不是万能的,所以python才会以“垃圾回收机制为主,标记-清除和分代收集为辅”
关于python里内部的运行机制,有兴趣的鱼油可以参考《Python源码剖析》这本书,在http://so.baiduyun.me/上搜索这本书,有资源下载,因为木木经常习惯性关闭分享链接(强迫症),所以木木就不分享了
……………………………………………………………………………………华丽的分割线 ………………………………………………
提问时间:
请告诉我,执行了以下程序之后,
a=[1]
a.append(a)
b=a
import sys
a=1
sys.getrefcount(a)
sys.getrefcount(b)
结果是?
************************************************************
关注
木有百科
关注不一样的编程世界
|
-
|