是的,字典将存储在过程存储器中。因此,如果它变得足够大,以至于系统RAM中没有足够的空间,那么当系统开始在磁盘之间来回交换内存时,您可能会看到速度显着下降。
其他人则说,几百万件物品应该不会造成问题。我不确定。dict开销本身(在计算键和值占用的内存之前)非常重要。对于Python 2.6或更高版本,sys.getsizeof提供了有关各种Python结构占用多少RAM的一些有用信息。从64位OS X机器上的Python 2.6获得一些快速结果:
>>> from sys import getsizeof
>>> getsizeof(dict((n, 0) for n in range(5462)))/5462.
144.03368729403149
>>> getsizeof(dict((n, 0) for n in range(5461)))/5461.
36.053470060428495
因此,dict开销在此计算机上的每一项的36个字节与每项的144个字节之间变化(确切值取决于字典内部哈希表的填充程度;这里5461 = 2 ** 14 // 3是阈值之一内部哈希表已放大)。那是在增加字典项目本身的开销之前;如果它们都是短字符串(比如说6个字符或更少),那么每一项仍会增加另一个== 80字节(如果许多不同的键共享相同的值,则可能会更少)。
因此,它不会采取 的是 典型的机器上几百万字典项排RAM。