Почему bytes(lst) работает медленнее, чем bytearray(lst)?Python

Программы на Python
Ответить
Anonymous
 Почему bytes(lst) работает медленнее, чем bytearray(lst)?

Сообщение Anonymous »

При lst = [0] * 10**6 я получаю такие моменты:

Код: Выделить всё

  5.4 ± 0.4 ms  bytearray(lst)
5.6 ± 0.4 ms  bytes(bytearray(lst))
13.1 ± 0.7 ms  bytes(lst)

Python:
3.13.0 (main, Nov  9 2024, 10:04:25) [GCC 14.2.1 20240910]
namespace(name='cpython', cache_tag='cpython-313', version=sys.version_info(major=3, minor=13, micro=0, releaselevel='final', serial=0), hexversion=51183856, _multiarch='x86_64-linux-gnu')
Я ожидал, что bytes(lst) и bytearray(lst) будут одинаково быстрыми, а bytearray(lst) будет медленнее один, поскольку это более сложный тип (обладает большей функциональностью, поскольку он изменчив). Но все наоборот. И даже обход bytes(bytearray(lst)) выполняется намного быстрее, чем bytes(lst)! Почему bytes(lst) работает так медленно?
Сценарий тестирования (попробуйте это онлайн!):

Код: Выделить всё

from timeit import timeit
from statistics import mean, stdev
import random
import sys

setup = 'lst = [0] * 10**6'

codes = [
'bytes(lst)',
'bytearray(lst)',
'bytes(bytearray(lst))'
]

times = {c: [] for c in codes}
def stats(c):
ts = [t * 1e3 for t in sorted(times[c])[:5]]
return f'{mean(ts):5.1f} ± {stdev(ts):3.1f} ms '
for _ in range(25):
random.shuffle(codes)
for c in codes:
t = timeit(c, setup, number=10) / 10
times[c].append(t)
for c in sorted(codes, key=stats):
print(stats(c), c)

print('\nPython:')
print(sys.version)
print(sys.implementation)
Вдохновлен ответом, который также показал, что bytearray работает быстрее.


Подробнее здесь: https://stackoverflow.com/questions/793 ... tearraylst
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»