擅长:python、mysql、java
<p>哦,这是整数列表优化的一个坏例子。问题是这是从int的列表开始的:</p>
<pre><code>bin2 = [0] * L
</code></pre>
<p>这在内部存储为整数数组。它通常要紧凑得多,即使在本例中它不会改变任何东西-因为在CPython上,它是一个包含同一对象<code>L</code>副本的列表{<cd2>}。在</p>
<p>但问题是,很快,我们就会在列表中存储一个<code>long</code>。此时,我们需要将整个列表转换为可以存储任何内容的通用类型。但是!问题是我们看到了1亿个零,所以我们创建了1亿个<code>0</code>对象。这会立即造成3GB的内存压力,而列表本身的内存压力则为800MB。在</p>
<p>如果像这样初始化列表,我们可以检查是否不会出现问题,这样它就真正包含了1亿次相同的对象:</p>
^{pr2}$
<p>也就是说,在您的示例中,首先不需要列表包含1亿个元素。您可以将其初始化为:</p>
<pre><code>bin2 = [1]
</code></pre>
<p>并使用<code>bin2.append()</code>。这使得程序可以更快地启动,并且在开始时不会占用大量内存。在</p>
<p>注意PyPy3仍然比CPython3使用更多的内存。在</p>