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

时间:2011-07-05 08:23:45

标签: python dictionary memory-management

当我在getsizeof模块中使用sys方法进行词典时,我感到有些困惑。下面我创建了一个两个字符串的简单字典。两个字符串的大小明显大于字典中的大小。字典大小可能只是字典开销,即它不考虑实际数据。找出整个字典(键,值,字典开销)的内存使用情况的最佳方法是什么?

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

3 个答案:

答案 0 :(得分:8)

来自PythonDocs

  

有关使用getsizeof()递归查找容器大小及其所有内容的示例,请参阅recursive sizeof recipe

所以它只计算开销,但你可以使用this link中的函数为像dicts这样的容器计算它。

答案 1 :(得分:3)

好吧,字典不会将实际字符串存储在其中,它有点像C / C ++指针,所以你只能在字典中为每个元素获得一个不变的开销。

总大小

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

答案 2 :(得分:3)

递归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