8

假设我在 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]

我想问的是:

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

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

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

4

1 回答 1

7

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

这占用了 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)}

因此,就内存使用而言,第二个显然更好,但它们是完全不同的解决方案,很难说哪个整体“更好”。这一切都取决于用例。

 

编辑:

差异要小得多,但在使用随机值(具有唯一ids)时仍然很重要。

这花了 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)}
于 2019-05-28T15:30:29.277 回答