Кортежи примерно на 10% быстрее.
>>> timeit.timeit("numpy.array((2, 5))", setup="import numpy")
0.9039838570024585
>>> timeit.timeit("numpy.array([2, 5])", setup="import numpy")
1.0044978570003877
Я получил те же результаты, что и на примере numpy.array((a[0] + 1, 10))
.Инструмент dis
раскрывает причину этой разницы:
>>> dis.dis("numpy.array((2, 5))")
1 0 LOAD_NAME 0 (numpy)
2 LOAD_METHOD 1 (array)
4 LOAD_CONST 0 ((2, 5))
6 CALL_METHOD 1
8 RETURN_VALUE
>>> dis.dis("numpy.array([2, 5])")
1 0 LOAD_NAME 0 (numpy)
2 LOAD_METHOD 1 (array)
4 LOAD_CONST 0 (2)
6 LOAD_CONST 1 (5)
8 BUILD_LIST 2
10 CALL_METHOD 1
12 RETURN_VALUE
Кажется, кортеж обрабатывается как отдельный объект при его создании, тогда как список необходимо построить.