Python 딕셔너리 병합 시 성능 비교

문제 상황

여러 외부 API의 응답을 하나의 딕셔너리로 통합하는 작업에서 병목이 발생했다. 평균 5~10개 정도의 딕셔너리를 병합하는데, 초당 수백 건의 요청을 처리하다 보니 작은 차이도 누적되었다.

테스트한 방법들

import time

# 샘플 데이터
d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}
d3 = {'e': 5, 'f': 6}

# 방법 1: update() 사용
def merge_update():
    result = {}
    result.update(d1)
    result.update(d2)
    result.update(d3)
    return result

# 방법 2: unpacking (Python 3.5+)
def merge_unpacking():
    return {**d1, **d2, **d3}

# 방법 3: dict() + items()
def merge_items():
    return dict(list(d1.items()) + list(d2.items()) + list(d3.items()))

결과

각 방법을 100만 회 반복 실행했을 때:

  • update(): 약 1.2초
  • unpacking: 약 0.8초
  • items(): 약 1.5초

unpacking 방식이 가장 빠르고 코드도 간결했다. Python 3.5 이상에서만 동작하지만, 우리 환경은 3.6이라 문제없었다.

적용

def aggregate_api_responses(responses):
    # responses: List[Dict]
    result = {}
    for resp in responses:
        result = {**result, **resp}
    return result

이후 응답 처리 속도가 약 15% 개선되었다. 큰 차이는 아니지만 트래픽이 많은 엔드포인트에서는 의미 있는 수치였다.

주의사항

딕셔너리가 매우 클 경우(키 1만 개 이상)에는 양상이 달라질 수 있다. 실제 데이터 크기로 프로파일링하는 것이 중요하다.