擅长:python、mysql、java
<p>mikegraham很好地解释了为什么字典使用更多的内存,但是我想我应该解释一下为什么defaultdicts的表dict开始占用这么多内存。在</p>
<p>现在设置defaultdict(DD)的方式是,每当您检索不在DD中的元素时,您将获得DD的默认值(对于您的案例,DD将存储一个以前不在DD中的键,默认值为0。我个人不喜欢这样,但事情就是这样的。然而,这意味着,对于内部循环的每次迭代,都会分配新的内存,这就是为什么它会一直占用。如果你改变路线</p>
<pre><code>for k in topKeys:
for j in keys:
dat[k,j] = table[k][j]
</code></pre>
<p>到</p>
^{pr2}$
<p>然后默认值没有被分配给DDs中的键,因此内存对于我来说保持在540mb左右,这主要是为dat分配的内存。DDs对于稀疏矩阵来说是不错的,但是如果您想要的话,您可能应该在Scipy中使用稀疏矩阵。在</p>