Python中字典的内存使用情况?

2024-03-29 13:00:15 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在字典的sys模块中使用getsizeof方法时,我有点困惑。下面我创建了一个包含两个字符串的简单字典。这两个字符串的大小显然比字典中的一个大。字典大小可能只是字典开销,也就是说,它没有考虑实际数据。找出整个字典的内存使用情况(键、值、字典开销)的最佳方法是什么?

>>> first = 'abc'*1000
>>> second = 'def'*1000
>>> my_dictionary = {'first': first, 'second': second}
>>> getsizeof(first)
3021
>>> getsizeof(second)
3021
>>> getsizeof(my_dictionary)
140

Tags: 模块数据方法内存字符串dictionary字典my
3条回答

PythonDocs

See recursive sizeof recipe for an example of using getsizeof() recursively to find the size of containers and all their contents.

所以它只计算开销,但是可以使用this link中的函数为dict之类的容器计算开销。

< >字典中没有存储实际字符串,它有点像C/C++指针,所以你只能在字典中为每一个元素得到一个固定的开销。

总尺寸是

size = getsizeof(d)
size += sum(map(getsizeof, d.itervalues())) + sum(map(getsizeof, d.iterkeys()))

递归的getsizeof将得到实际的大小,但是如果您有多个字典层,并且只想得到一个粗略的估计。json很方便。

>>> first = 'abc'*1000
>>> second = 'def'*1000
>>> my_dictionary = {'first': first, 'second': second}
>>> getsizeof(first)
3049
>>> getsizeof(second)
3049
>>> getsizeof(my_dictionary)
288
>>> getsizeof(json.dumps(my_dictionary))
6076
>>> size = getsizeof(my_dictionary)
>>> size += sum(map(getsizeof, my_dictionary.values())) + sum(map(getsizeof, my_dictionary.keys()))
>>> size
6495

相关问题 更多 >