控制dict最大条目数量,然后不断的对dict增删该,发现内存不断增长。。。。
del dict[key] 以后,内存不释放的啊?
用gc也没用,内存一直增长。
1
zhyu 2015-08-01 12:58:25 +08:00 via iPhone
不释放的。你可以建个新dict把旧dict拷过去
|
3
xiazi 2015-08-01 13:00:49 +08:00
如果能确认被del的没有在其他地方被引用的话, 先清理缓存后再gc:
import sys, gc sys._clear_type_cache() gc.collect() |
4
twistoy 2015-08-01 13:09:48 +08:00
是不会释放的。因为删除了一个item之后,还要保证hash的探测链是完整的,所以那个entry只是被标记成了空,但并没有被删除掉,这部分不在gc的范围之内的。
|
5
ruoyu0088 2015-08-01 18:16:07 +08:00
你是说字典不释放空间还是被删除的对象不被释放,如果是对象不被释放,也许还有别的引用。你可以用getrefcount()查看引用计数,如果计数为2,那么删除该对象,它就会被回收:
import gc import sys o = object() d = {"a": object(), "b":o} print sys.getrefcount(d["a"]) print sys.getrefcount(d["b"]) |
6
invite OP |
8
Feiox 2015-08-01 21:53:26 +08:00
为什么我测试的,完全不存在楼主遇到的问题,版本 Py 3.4,代码如下:
a = {} while True: key = int(random.random() * 1000000) a[key] = [time.time()] * 10000000 del a[key] |
9
22too 2015-08-02 12:33:54 +08:00
个人做法,一般字典用完,在初始换一次,初始换成空字典。
a = dict () a [123] = "asdf" a = dict() |
10
fatelei 2015-08-03 15:16:01 +08:00
del dict[key],只是把对应 key-value 的 entry 删除掉,dict本身的内存如果不满足 garbage collector 回收的条件,内存是不会被释放的,还是检查一次,dict中的 key-value 为啥会让内存不断增长吧。
|