是的,dict将存储在进程内存中.因此,如果它足够大以至于系统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
Run Code Online (Sandbox Code Playgroud)
因此,dict开销在每个项目36个字节和每个项目144个字节之间变化(确切的值取决于字典的内部哈希表的填充程度;这里5461 = 2**14 // 3是其中一个阈值内部哈希表被放大).这是在添加dict项目本身的开销之前; 如果它们都是短字符串(比方说是6个字符或更少)那么每个项目仍然会增加另一个> = 80字节(如果许多不同的密钥共享相同的值,则可能更少).
因此,它不会拿那几百万字典项用尽典型的机器上RAM.
数以百万计的项目主要关注的不是字典本身,而是每个项目占用多少空间.尽管如此,除非你做一些奇怪的事,否则他们应该适合.
但是,如果你有一个拥有数百万个密钥的字典,你可能会做错事.你应该做一个或两个:
弄清楚你应该使用什么数据结构,因为单个dict可能不是正确的答案.这究竟是什么取决于你在做什么.
使用数据库.你的Python应该附带一个sqlite3模块,所以这是一个开始.