Следующий код демонстрирует проблему, с которой вы столкнулись:
import sys
x = [True]*(sys.maxint+1)
, что дает OverflowError
. Если вы вместо этого сделаете:
x = [True]*(sys.maxint)
тогда вы должны получить MemoryError
.
Вот что происходит. Python может обрабатывать произвольно большие целые числа со своим собственным расширяемым типом данных. Однако, когда вы пытаетесь создать список, как описано выше, Python пытается преобразовать число повторений небольшого списка, который является целым числом Python, в целое число C типа Py_ssize_t. Py_ssize_t определяется по-разному в зависимости от вашей сборки, но может быть ssize_t, long или int. По сути, перед выполнением преобразования Python проверяет, может ли целое число Python вписаться в целочисленный тип C, и выдает ошибку OverflowError, если она не работает.