擅长:python、mysql、java
<p>下面的代码演示了您遇到的问题:</p>
<pre><code>import sys
x = [True]*(sys.maxint+1)
</code></pre>
<p>它产生一个<code>OverflowError</code>。如果你这样做了:</p>
<pre><code>x = [True]*(sys.maxint)
</code></pre>
<p>然后你应该得到一个<code>MemoryError</code>。</p>
<p>这是发生的事情。Python可以使用自己的可扩展数据类型处理任意大的整数。但是,当您尝试创建一个类似于上面的列表时,Python会尝试将小列表的重复次数(Python整数)转换为Py_ssize_t类型的C整数。Py_ssize_t根据您的构建定义不同,但可以是ssize_t、long或int,在执行转换之前,Python检查Python整数是否适合C integer类型,如果不起作用,则引发OverflowError。</p>