如何强制Python字典收缩?

2024-01-03

我在其他语言中也经历过这种情况。现在我在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 字典的实现在这个视频中得到了很好的解释:

https://youtu.be/C4Kc8xzcA68 https://youtu.be/C4Kc8xzcA68

有一位与会者问了同样的问题(https://youtu.be/C4Kc8xzcA68?t=1593 https://youtu.be/C4Kc8xzcA68?t=1593),说话者给出的答案是:

调整大小仅在插入时计算;当字典缩小时,它只会获得很多虚拟条目,并且当您重新填充时,它将开始重用这些条目来存储密钥。 [...]您必须将键和值复制到新字典中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何强制Python字典收缩? 的相关文章

随机推荐