说有一个词典的变量增长很大期间,运行时-成数以百万计的关键:值对。

这不会变得存储在RAM、有效地使用所有可用的存储器和减缓系统的其它部分?

要求解释为显示的整个词典是一个糟糕的想法,但会好的只要一个关键的访问在时间吗?

有帮助吗?

解决方案

是的,字典将存储在过程存储器中。因此,如果它变得足够大,以至于系统RAM中没有足够的空间,那么当系统开始在磁盘之间来回交换内存时,您可能会看到速度大大降低。

其他人则说,几百万个物品应该不会造成问题;我不确定。 dict开销本身(在计算键和值占用的内存之前)非常重要。对于Python 2.6或更高版本, sys.getsizeof 提供了一些有用的信息关于各种Python结构占用多少RAM。在64位OS X机器上从Python 2.6获得了一些快速结果: 通用标签

因此,该机器上的dict开销在每台机器36个字节与每个项目144个字节之间变化(确切值取决于字典内部哈希表的填充程度;此处5461= 2 ** 14 // 3是其中之一)内部哈希表被放大的阈值)。那是在增加字典项目本身的开销之前;如果它们都是短字符串(比如说6个字符或更少),那么每项仍会增加另一个== 80字节(如果许多不同的键共享相同的值,则可能会更少)。

因此, 数百万个字典项目不需要花费一台典型机器上的RAM。

其他提示

数百万个项目的主要关注点不是字典本身,而是每个项目占用多少空间。不过,除非您做的很怪异,否则它们可能会适合。

但是,如果您有一个包含数百万个键的字典,则可能是您做错了什么。您应该执行以下一项或两项操作:

  1. 弄清楚您实际上应该使用什么数据结构,因为单个dict可能不是正确的答案。究竟是什么取决于您的工作。

  2. 使用数据库。您的Python应该带有sqlite3模块,所以才是一个开始。

是的,蟒蛇 dict 存储在RAM。几百万键不是一个问题,对于现代计算机,但是。如果你需要更多和更多的数据和RAM运行,可考虑使用一个真正的数据库。选择包括一个关系DB喜欢源码(内在蟒蛇,由的方式)或一个关键价值的储存喜欢穿红衣的.

就没有意义显示数以百万计的项目的解释,但是在访问一单元应该仍然非常有效的。

就我所知,Python使用最佳的哈希算法,因此您可能将获得最佳的内存效率和性能。现在,是否将整个内容保存在RAM中或提交给交换文件取决于您的OS,并取决于您拥有的RAM数量。 我想说的最好是尝试一下: 通用标签

运行时的外观如何?在我的系统上大约需要350Mb,至少可以说是可以管理的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top