当我在getsizeof
模块中使用sys
方法进行词典时,我感到有些困惑。下面我创建了一个两个字符串的简单字典。两个字符串的大小明显大于字典中的大小。字典大小可能只是字典开销,即它不考虑实际数据。找出整个字典(键,值,字典开销)的内存使用情况的最佳方法是什么?
>>> first = 'abc'*1000
>>> second = 'def'*1000
>>> my_dictionary = {'first': first, 'second': second}
>>> getsizeof(first)
3021
>>> getsizeof(second)
3021
>>> getsizeof(my_dictionary)
140
答案 0 :(得分:8)
有关使用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