Я пытаюсь ускорить часть моего кода, которая включает в себя циклический просмотр и установку значений в большом двумерном массиве.Одним из предложений было то, что я пытаюсь предварительно выделить массив, а не использовать .append (), но было отмечено, что в Python .append () является амортизированной операцией O (1).
Однако, когда я тестировал его, используя следующий код:
import time
x = list()
z = list()
t1 = time.time()
for i in range(10000):
z.append([])
for j in range(10000):
z[i].append(0)
t1 = time.time()
for i in range(10000):
x.append([])
for j in range(10000):
x[i].append(1)
print(time.time()-t1)
t1 = time.time()
for i in range(10000):
for j in range(10000):
z[i][j] = 1
print(time.time()-t1)
Я получаю предварительно выделенный массив, занимающий на 3-4 секунды меньше, чем массив, который не был предварительно выделен (~ 17 спо сравнению с ~ 21).Что в этом коде заставляет основанную на .append () функцию занимать больше времени, чем замена значения в предварительно выделенном массиве?