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

Python中字典的内存使用情况?,python,dictionary,memory-management,Python,Dictionary,Memory Management,在字典的sys模块中使用getsizeof方法时,我有点困惑。下面我创建了一个包含两个字符串的简单字典。这两个字符串的大小明显大于字典中的一个字符串。字典大小可能只是字典开销,也就是说,它不考虑实际数据。计算整个字典的内存使用情况(键、值、字典开销)的最佳方法是什么 字典不存储实际的字符串,它有点像C/C++指针,所以字典中每个元素的开销都是恒定的 总尺寸为 size = getsizeof(d) size += sum(map(getsizeof, d.itervalues())) + sum

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


字典不存储实际的字符串,它有点像C/C++指针,所以字典中每个元素的开销都是恒定的

总尺寸为

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

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


因此,它只计算开销,但您可以使用中的函数来计算dict之类的容器的开销。

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

要学究的话,如果任何一个值是一个容器(而不是一个标量),那么它也需要深入到该容器中。这肯定意味着创造力,但它需要所有东西都是可序列化的,速度较慢,正如你所说,这是一个近似值……它不适用于像
d=dict(a=“4”,b=“4”,c=“4”,d=“4”)这样的简单dict
它正在跳过对应于
b、c、d的值
很抱歉,我猜您的代码是正确的,在上述情况下,python正在重用对象
“4”
>>> 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