使用两个字典与一个字典的Python内存使用情况

时间:2019-05-28 15:23:14

标签: python

假设我在Python中有2个字典,像这样:

d1 = {}
d2 = {}
d1[(i, j)] = 10
d2[(i, j)] = 20

相反,我可以这样做:

d = {}
d[(i, j)] = (10, 20)

可以通过d[(i,j)][0]d[(i,j)][1]进行访问。

我想问的是:

第二个选项是否比第一个选项需要更少的内存?

如果是,那是内存的一半吗?

我需要在正在编写的程序中使用非常大的字典,如果第二种解决方案更好,我会选择这样做。

1 个答案:

答案 0 :(得分:8)

在Windows 10计算机上的32位Python 3.7.3 repl中对此进行了测试:

这占用了155MB的内存:

>>> d1 = {(i, j): 10 for i in range(1000) for j in range(1000)}
>>> d2 = {(i, j): 20 for i in range(1000) for j in range(1000)}

只有79MB:

>>> d = {(i, j): (10, 20) for i in range(1000) for j in range(1000)}

因此第二个显然在内存使用方面更好,但是它们是完全不同的解决方案,很难说哪个总体上“更好”。这完全取决于用例。

编辑:

差异很小,但使用随机值(具有唯一的id时)仍然很明显。

这花了157MB:

>>> from random import randint
>>> d1 = {(i, j): randint(0, 100) for i in range(1000) for j in range(1000)}
>>> d2 = {(i, j): randint(0, 100) for i in range(1000) for j in range(1000)}

这119MB:

>>> from random import randint
>>> d = {(i, j): (randint(0, 100), randint(0, 100)) for i in range(1000) for j in range(1000)}