Разве в нижеприведенном коде
import array
arr = array.array('i', [0] * 100)
не создается ненужный временный list, размером в 100 элементов? Или когда там [0] * XXX оно на уровне парсера разруливает,
что там на самом деле нужно сделать что то вроде:
arr = array._internal_allocate_array('i', 100)
Потому что если нет, то оно как бы отчасти теряет смысл...