Копирование перетасованного списка range(10**6)
десять раз занимает около 0,18 секунды: (это пять прогонов)
0.175597017661
0.173731403198
0.178601711594
0.180330912952
0.180811964451
Копирование неубранного списка десять раз занимает около 0,05 секунды:
0.058402235973
0.0505464636856
0.0509734306934
0.0526022752744
0.0513324916184
Здесь мой тестовый код:
from timeit import timeit
import random
a = range(10**6)
random.shuffle(a) # Remove this for the second test.
a = list(a) # Just an attempt to "normalize" the list.
for _ in range(5):
print timeit(lambda: list(a), number=10)
Я также попытался скопировать с a[:]
, результаты были схожи (т.е. большая разница в скорости)
Почему большая разница в скорости? Я знаю и понимаю разницу в скорости в Почему быстрее обрабатывать отсортированный массив, чем пример несортированного массива?, но здесь моя обработка не принимает решений. Он просто слепо копирует ссылки внутри списка, нет?
Я использую Python 2.7.12 в Windows 10.
Изменить: Исправлено Python 3.5.2, теперь результаты были почти одинаковыми (последовательно перетасовывались примерно на 0,17 секунды, последовательно перемешивались около 0,05 секунды). Вот код для этого:
a = list(range(10**6))
random.shuffle(a)
a = list(a)
for _ in range(5):
print(timeit(lambda: list(a), number=10))