Python array
지난 10월 7일에 배포된 Python 3.13 업데이트를 보다가, 파이썬에도 array
모듈이 있다는 것을 발견했다. Numpy에만 있는 줄 알았다.
배열 자료형은 list
와 비슷하지만 요소들의 type이 모두 똑같다는 특징이 있는데, 이 덕분에 평소에 자주 사용하던 routine의 속도를 향상시킬 수 있지 않을까 싶어서 간단한 실험을 해봤다.
아래 코드는 기계학습에서 학습과정의 손실함수를 모니터링할 때 많이 사용하는 루틴이다. 손실함수의 값을 경사하강 단계마다 list
혹은 array
에 추가하는 상황을 단순화했다.
from time import time
from array import array
def speed(list_or_array):
tic = time()
for _ in range(100000):
list_or_array.append(1.)
toc = time()
return toc - tic
arr = array("f") # "f" = float
ls = []
speed(arr) # ~ 0.03
speed(ls) # ~ 0.015
결과는, array
가 list
보다 느렸다. 왜 그런지 찾아보다가 Reddit comment를 발견했다. 요약하자면 list
는 포인터만 저장하기 때문에 충분히 빠르다는 것 같다. 덧붙여, Python에서 array
의 요소에 접근할 때 (e.g. arr[0]
) 새로운 파이썬 object를 만들기 때문에, 포인터에만 접근하는 ls[0]
보다 훨씬 느릴 수 있다고 한다.