이 글은 기술적으로 어떤 방식이 더 빠른가를 테스트하기보다 실제 많이 사용하는 패턴을 중심으로 어떤 패턴이 속도가 빠른지를 측정해 보았다.
실험 내용
목적: Python_list 또는 Numpy_array의 각 요소에 1을 더한 후 결과를 반환한다. (예: [0, 1, 2, 3] → [1, 2, 3, 4])
방법: 한 패턴 당 총 3번의 실행 시간을 측정하고 평균값을 구한다.
comp_Py_list: 1.042 # list comprehension
map_Py_list: 1.432 # list(map(...))
for_Py_list: 1.589 # for i in Py_list
add_Np_array: 0.016 # + (operator)
def_Np_array: 0.026 # pre-defined 'add' function
array가 압도적으로 빠른 것을 확인할 수 있다. Python list의 경우, 리스트 컴프리헨션을 사용했을 때 비교적 빠른 것을 확인할 수 있다.
자세한 코드는 아래에서 확인할 수 있다.
import time
import numpy as np
def timer(function):
# 시간 측정을 위한 함수
...
def add(i):
return i + 1
py_list = list(range(10**7))
np_array = np.array(py_list)
### 실행 패턴 ###
@timer
def for_Py_list():
_ = list()
for i in py_list:
_.append(i + 1)
@timer
def comp_Py_list():
_ = [i + 1 for i in py_list]
@timer
def map_Py_list():
_ = list(map(add, py_list))
@timer
def add_Np_array():
_ = np_array + 1
@timer
def def_Np_array():
_ = add(np_array)
단순 반복
만약 시퀀스의 요소를 변환하는 작업이 아니라 단순 반복이라면 이야기가 달라진다.
@timer
def for_py_list():
for i in py_list:
i + 1
@timer
def for_np_array():
for i in np_array:
i + 1
for_py_list: 0.531
for_np_array: 2.750
이렇게 단순 반복하는 작업에서는 Python list가 확실히 더 빠른 속도를 보여준다.