배열(Array) vs 리스트(List) 차이

1. 배열이란 ? 개념과 특징 정리

  • 배열의 경우 처음에 선언 시에 크기까지 같이 선언을 하기 때문에 크기가 고정적이며
  • 중간 값에 대한 삭제 수정등이 발생 할 경우 해당 데이터 뒤에 있는 데이터들을 앞으로 당겨야 하는 과정에서 시간이 오래걸림

예시 : [1,2,3,4,5] -> (3삭제 시 ) [1,2,x,4,5] -> [1,2,4,5] 앞으로 당겨줘야하므로 시간 걸림

  • 동일 자료형 + 메모리 구조가 연속적 공간임 -> 인덱스(0번째 , 1번째)를 통해 빠르게 값을 찾을 수 있음 (그러므로 키 값을 지정할 수 없음)

2. 리스트란 ? 개념과 특징 정리

  • 리스트의 경우 리스트 선언만 진행 (크기에 대한 선언을 하지 않음 -> 크기가 가변)
  • 중간 값이 삭제나 수정 등이 발생해도 해당 값과 연결된 부분만 잘라가기 떄문에 앞으로 당기는 과정이 없음 -> 시간이 오래 걸리지 않음
  • 단, 데이터 접근에 대해서 단순히 인덱스(0번째, 1번째) 가 아닌 포인터를 통해 연결되기 때문에 값을 찾는게 상대적으로 시간이 더 걸림

배열과 리스트, 언제 어떤 걸 써야 할까?

요약을 하면 데이터 변경이 많지 않은 경우 배열이 유리하고 데이터 변경이 많이 발생하는 경우 리스트를 사용하는 것이 속도면에서 유리하다.

배열이 유리한 경우

  • 들어올 데이터가 고정적인 경우
  • 한번 정해진 데이터에서 추가, 수정 및 삭제 기능을 요구하지 않는 경우

리스트가 유리한 경우

  • 로그 데이터 같이 데이터가 지속적으로 들어오는 경우
  • 값의 수정이 자주 발생하는 경우

예시 코드

import time
from collections import deque

N = 100_000  # 테스트 데이터 개수

start = time.time()
array = []
for i in range(N):
    array.insert(0, i)  
end = time.time()
print(f"배열 삽입 시간: {end - start:.4f}초")

start = time.time()
linked_list = deque()
for i in range(N):
    linked_list.appendleft(i) 
end = time.time()
print(f"리스트 삽입 시간: {end - start:.4f}초")

기술 면접 예시

  • 배열과 리스트의 차이를 설명해보세요.
  • 리스트에서 특정 값에 접근하려면 왜 느릴까요?
  • 중간에 값을 자주 삽입해야 할 때 어떤 자료구조가 적합할까요?

요약


  1. 배열은 이미 정해진 크기가 존재하지만 리스트는 가변적임
  2. 배열의 경우 순서를 인덱스(숫자)로 받기에 숫자로 찾아가면 되는 반면 리스트의 경우 포인터를 통해 연결되기 때문에 초기 데이터 접근의 경우 배열이 더 유리하다
  3. 데이터의 추가, 수정, 삭제와 같은 변형이 존재하는 경우 리스트가 유리하지만 고정적인 경우 데이터를 빨리 찾는 배열이 더 유리하다.