我在其他语言中经历过这种情况.现在我在Python中遇到了同样的问题.我有一个有很多CRUD动作的字典.可以假设从字典中删除元素应该减少它的内存占用.事实并非如此.一旦字典大小增加(通常加倍),它就永远不会(?)释放分配的内存.我运行了这个实验:
import random
import sys
import uuid
a= {}
for i in range(0, 100000):
a[uuid.uuid4()] = uuid.uuid4()
if i % 1000 == 0:
print sys.getsizeof(a)
for i in range(0, 100000):
e = random.choice(a.keys())
del a[e]
if i % 1000 == 0:
print sys.getsizeof(a)
print len(a)
Run Code Online (Sandbox Code Playgroud)
第一个循环的最后一行是6291736.第二个循环的最后一行也是6291736如此.字典的大小是0.
那么如何解决这个问题呢?有没有办法强制释放内存?
PS:不需要随机做 - 我玩第二个循环的范围.