timeit
- хороший инструмент для микро-бенчмаркинга, но его нужно использовать с особой осторожностью, когда операции, которые вы хотите сравнить, могут включать изменения на месте - в этом случае вам необходимо включить дополнительные операции предназначен для изготовления необходимых копий. Тогда в первый раз просто «лишние» накладные расходы:
$ python -mtimeit -s'a="11011";b="01001"' 'la=list(a);lb=list(b)'
100000 loops, best of 3: 5.01 usec per loop
$ python -mtimeit -s'a="11011";b="01001"' 'la=list(a);lb=list(b)'
100000 loops, best of 3: 5.06 usec per loop
Таким образом, создание двух совершенно новых списков, которые нам нужны (чтобы избежать изменений), стоит чуть более 5 микросекунд (при фокусировке на небольшие различия запустите все как минимум 2-3 раза, чтобы взглянуть на диапазон неопределенности). После чего:
$ python -mtimeit -s'a="11011";b="01001"' 'la=list(a);lb=list(b);x=a[:3]+b[3:]'
100000 loops, best of 3: 5.5 usec per loop
$ python -mtimeit -s'a="11011";b="01001"' 'la=list(a);lb=list(b);x=a[:3]+b[3:]'
100000 loops, best of 3: 5.47 usec per loop
нарезка и конкатенация строк в этом случае могут стоить еще 410-490 наносекунд. И:
$ python -mtimeit -s'a="11011";b="01001"' 'la=list(a);lb=list(b);la[3:]=lb[3:]'
100000 loops, best of 3: 5.99 usec per loop
$ python -mtimeit -s'a="11011";b="01001"' 'la=list(a);lb=list(b);la[3:]=lb[3:]'
100000 loops, best of 3: 5.99 usec per loop
Объединение списка на месте может стоить 930-980 наносекунд. Разница безопасно выше уровней шума / неопределенности, поэтому вы можете с уверенностью утверждать, что для этого варианта использования работа со строками займет примерно вдвое меньше времени, чем работа со списками. Конечно, также важно измерить диапазон вариантов использования, которые соответствуют и типичны для ваших типичных узких мест!