Я сейчас изучаю алгоритмы и структуры данных.
Я подумал, что проведу быстрый timeit.timeit
тест для итерации по списку из 2 ** 30 случайных целых чисел в list()
по сравнению с тем же для формата array.array
.
Я ожидал, что массив закончится первым, поскольку одним из немногих приглушенных преимуществ, которые я видел в других публикациях с массивом Python, является производительность.
(У меня изначально было ошибочное впечатление, что список был реализован как связанный список: спасибо за исправление, Дункан)
Конечно, массив должен быть по крайней мере таким же быстрым, как список?
import os
import array
l = list(os.urandom(2**30))
a = array.array('I', l)
def test_list():
for i in l:
pass
def test_array():
for i in a:
pass
>>> timeit.timeit(test_array, number=5)
50.08525877200009
>>> timeit.timeit(test_list, number=5)
37.00491460799958
Вот информация о моей платформе:
Python 3.6.5, [GCC 7.3.0] в Linux x86_64 (Intel i5 4660)