파이썬/기초 프로그래밍

메모리를 아끼는 파이썬 데이터 처리 비법 — map, filter, reduce

Data Jun 2025. 9. 13. 16:49

1. map, filter, reduce 의 동작 원리

  • map / filter : 파이썬 3에서는 이터레이터(iterator) 를 반환합니다.
    • 즉, 결과를 한 번에 리스트로 만들어 메모리에 올리는 게 아니라 요청할 때마다 값을 하나씩 생성(lazy evaluation) 합니다.
    • 그래서 대용량 데이터를 다룰 때 메모리 사용을 크게 줄일 수 있습니다.
nums = range(1, 1000000000)   # 10억 개
mapped = map(lambda x: x*2, nums)  # 아직 계산 안 함
print(next(mapped))  # 2 (필요할 때 계산)

reduce : 누적해서 하나의 값을 만들어내는 함수. 내부적으로 반복문을 돌리지만, 역시 중간 결과를 리스트에 저장하지 않아서 메모리 부담이 적습니다.

 

2. 메모리 효율

  • list comprehension 같은 구문은 결과 리스트를 전부 메모리에 생성합니다.
  • 반면 map/filter 는 필요할 때만 연산 → 메모리 절약
  • 예: 1억 개 데이터를 처리해도 map/filter 객체는 작은 이터레이터 하나만 메모리에 존재합니다.

 

3. 처리 속도

  • map, filter, reduce 는 내부적으로 C로 구현된 루프를 사용하기 때문에, 순수 파이썬 for 문보다 빠른 경우가 많습니다.
  • 하지만 짧은 데이터 처리에서는 속도 차이가 크지 않고, 대용량 데이터일 때 이점이 더 두드러집니다.

 

4. 코드 간결성

  • map, filter, reduce → 함수형 스타일로 코드를 짧고 명확하게 작성 가능
  • 다만, 가독성이 떨어질 수 있어서 파이썬에서는 list comprehension 과 병행해서 쓰는 경우가 많습니다.

 

 

정리하면:

  • 대용량 데이터 처리에서 메모리 사용을 줄이고 효율적으로 동작
  • map, filter 는 lazy evaluation(필요할 때만 연산) 덕분에 전체를 한 번에 메모리에 올리지 않습니다.
  • reduce 는 중간 결과를 따로 쌓지 않고 바로 누적하기 때문에 메모리 효율적입니다.
  • 또한, C 구현 기반이라 순수 파이썬 반복문보다 속도도 더 빠른 경우가 많습니다.