如何强制Python字典缩小?

Sch*_*999 7 python dictionary garbage-collection memory-management

我在其他语言中经历过这种情况.现在我在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:不需要随机做 - 我玩第二个循环的范围.

fra*_*cod 2

进行这种“重新散列”以减少内存使用的方法是创建一个新字典并复制内容。

Python 字典的实现在这个视频中得到了很好的解释:

https://youtu.be/C4Kc8xzcA68

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

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