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
4 个回答
4
其实,字典并不是把实际的字符串存储在里面,它的工作方式有点像C/C++中的指针。所以在字典中,每添加一个元素,你只会增加一点固定的开销。
总的大小是
size = getsizeof(d)
size += sum(map(getsizeof, d.itervalues())) + sum(map(getsizeof, d.iterkeys()))
9
递归的 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