Проверка Python Tuple vs List для включения профилирования производительности/размера байт-кодаPython

Программы на Python
Ответить
Anonymous
 Проверка Python Tuple vs List для включения профилирования производительности/размера байт-кода

Сообщение Anonymous »

Учитывая, что следующий код в Python3.9 дает тот же байт-код. (Список компилируется в кортеж)
"x" in ["a", "b", "c"]
"x" in ("a", "b", "c")

1 0 LOAD_CONST 1 ('x')
2 LOAD_CONST 2 (('a', 'b', 'c'))
4 CONTAINS_OP 0
6 RETURN_VALUE
2 0 LOAD_CONST 1 ('x')
2 LOAD_CONST 2 (('a', 'b', 'c'))
4 CONTAINS_OP 0
6 RETURN_VALUE

Почему timeit всегда говорит, что поиск в кортеже выполняется быстрее, чем поиск в массиве?
Учитывает ли timeit компиляцию?< /p>
Аналогично, когда я использую sys.getsizeof, он говорит, что кортеж использует меньше места.
Когда этот код запускается, есть ли какая-либо разница в пространстве между Кортеж и список в этом примере? Это означает, что после компиляции в байт-код нет никакой разницы в пространстве, насколько я понимаю, но, поскольку список не является неизменяемым, выделяется ли пространство до того, как список будет скомпилирован в кортеж?
import dis
import sys
from timeit import timeit

bcode = dis.dis(lambda: "x" in ["a", "b", "c"])
bcode2 = dis.dis(lambda: "x" in ("a", "b", "c"))

# why is the bottom always faster? - accounts for compile/start up time?
print(timeit(lambda: "x" in ["a", "b", "c"]))
print(timeit(lambda: "x" in ("a", "b", "c")))
# 0.10836188100000001
# 0.10678786800000001

# similarly I get that this is just returning __sizeof__(), but in practice (execution) is there any memory difference since the bytecode is the same?
print(sys.getsizeof(["a", "b", "c"])) # 120
print(sys.getsizeof(("a", "b", "c"))) # 64


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

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

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

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

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

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