假设我在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]
进行访问。
我想问的是:
第二个选项是否比第一个选项需要更少的内存?
如果是,那是内存的一半吗?
我需要在正在编写的程序中使用非常大的字典,如果第二种解决方案更好,我会选择这样做。
答案 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)}