gpt4 book ai didi

python - dict pop 不释放内存

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:19 25 4
gpt4 key购买 nike

看起来垃圾收集器不收集 python 2.7 中 dict() 中的 pop 值(未在 python 3 上尝试)。这是示例:

a = dict()

# fill the memory (dict)
for i in xrange(0, 9999999):
a[i] = i

# Memory usage is about 600 MB
# try to free the memory
for i in xrange(0, 9999999):
a.pop(i)

# print the dict and see it is empty
print "%r" % a
# prints: {}
# Memory usage is about 600 MB

import copy
a = copy.copy(a)
# Memory usage decreased to about 200 MB

import gc
gc.collect()
# Memory usage decreased to about 10 MB

有人知道为什么会发生这种情况以及如何解决这个内存泄漏问题吗?

最佳答案

不存在内存泄漏问题,因为当字典不再使用时,内存已被释放。字典使用内部表来存储条目。使用 pop 时不会释放这些表,因为每个键都映射到内部表的散列模数大小。因此,最后一个现有 key 可能位于该表的末尾。

为了说明这一点,我将使用 sys.getsizeof:

>>> a= {}
>>> sys.getsizeof(a)
288
>>> for i in range(9999999): a[i]=i
...
>>> sys.getsizeof(a)
402653280
>>> for i in range(9999999): del a[i]
...
>>> sys.getsizeof(a)
402653280
>>> a = copy.copy(a)
>>> sys.getsizeof(a)
288
>>>

与其使用过多的 pop,不如在必要时创建新词典。

关于python - dict pop 不释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37584921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com