Skip to content

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

결과는, arraylist보다 느렸다. 왜 그런지 찾아보다가 Reddit comment를 발견했다. 요약하자면 list는 포인터만 저장하기 때문에 충분히 빠르다는 것 같다. 덧붙여, Python에서 array의 요소에 접근할 때 (e.g. arr[0]) 새로운 파이썬 object를 만들기 때문에, 포인터에만 접근하는 ls[0]보다 훨씬 느릴 수 있다고 한다.