太原住房与城乡建设厅网站,南通网站搭建定制,北京网站建设 shwl,网站建设模块一项目三Python中的字典#xff0c;只有不再使用的时候才会释放对应的内存。在使用 pop 或者 delete 删除字典中的item(或者说entry)后#xff0c;为了保证hash table 探测链的完整#xff0c;那个被删除的entry只是被标记成了空#xff0c;并没有真正被删除掉#xff0c;所以该字…Python中的字典只有不再使用的时候才会释放对应的内存。在使用 pop 或者 delete 删除字典中的item(或者说entry)后为了保证hash table 探测链的完整那个被删除的entry只是被标记成了空并没有真正被删除掉所以该字典的内存占用没有得到释放。这是为了避免多度重建hash table。 释放内存
那如何释放字典的内存现已知的方案是创建或者拷贝一个旧字典再覆盖掉新字典。具体示例如下
import sys
import gc
import copy
a {}
print(init empty dict memory size{} bytes.format(sys.getsizeof(a)))for i in range(10**6):a[i] i
print(after set value, dict memory size{} bytes.format(sys.getsizeof(a)))for i in range(10**6):del a[i]# a.pop(i)print(after del, dict memory size{} bytes.format(sys.getsizeof(a)))
a_new dict(a)
print(after init a new one, dict memory size{} bytes.format(sys.getsizeof(a_new)))
b copy.copy(a)
print(after copy a new one, dict memory size{} bytes.format(sys.getsizeof(b)))
c copy.deepcopy(a)
print(after deepcopy a new one, dict memory size{} bytes.format(sys.getsizeof(c)))运行结果如下:
init empty dict memory size240 bytes
after set value, dict memory size41943144 bytes
after del, dict memory size41943144 bytes
after init a new one, dict memory size240 bytes
after copy a new one, dict memory size240 bytes
after deepcopy a new one, dict memory size240 bytes 参考文档;
Python应用专题 | 11如何释放字典的内存占用-阿里云开发者社区