【发布时间】:2015-07-15 23:23:52
【问题描述】:
我在其他语言中也经历过。现在我在 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)
第一个循环的最后一行是6291736。第二个循环的最后一行也是6291736。字典的大小是0。
那么如何解决这个问题呢?有没有办法强制释放内存?
PS:真的不需要随机 - 我玩的是第二个循环的范围。
【问题讨论】:
-
您可以尝试使用旧字典的内容创建一个新字典,并删除对旧字典的引用。
-
什么时候?按照时间表?如何阻止写入?
-
Python 的
threading、multiprocessing和asyncio模块 all 为您提供几乎相同的同步原语,例如Lock。我会开始查看适用模块的文档。 -
另外,6291736 是 6MB。您的应用程序的内存占用现在是个问题吗?过早调试是万恶之源……
-
确实如此。只要您从字典中删除条目,它们就会被重用。 6 MB 看起来不错。你想通过释放这个内存来解决什么问题?顺便说一句,即使你设法从 Python 手中撬开它,它也可能永远不会被释放回操作系统。
标签: python dictionary memory-management garbage-collection