토막코딩/Python

Python에서 functools.lru_cache: 자동 메모이제이션으로 함수 성능 향상하기

컴곰 2023. 9. 26. 07:49

Python에서 functools.lru_cache: 자동 메모이제이션으로 함수 성능 향상하기


재귀 함수나 반복적으로 같은 입력 값에 대한 계산을 수행하는 함수는 종종 비효율적입니다. 이러한 함수의 계산 시간을 줄이기 위해, 이전에 계산한 결과를 저장하고 재사용하는 메모이제이션이라는 기법이 사용됩니다. Python에서는 functools 모듈의 lru_cache 데코레이터를 사용하여 함수의 결과를 캐싱하고 자동으로 메모이제이션을 적용할 수 있습니다.

사용 방법:

  1. functools.lru_cache 데코레이터를 함수 위에 추가합니다.
  2. 함수를 호출하면, lru_cache는 함수의 입력값을 기반으로 결과를 캐시합니다.
  3. 동일한 입력 값으로 함수를 다시 호출하면, 캐시된 결과를 반환하여 함수 호출을 건너뜁니다.

예시:

피보나치 수열을 계산하는 재귀 함수:

from functools import lru_cache

@lru_cache(maxsize=None)  # 무제한 캐시 크기 설정
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

print(fibonacci(100))

기존의 피보나치 함수는 n이 증가함에 따라 계산 시간이 기하급수적으로 증가합니다. 그러나 lru_cache 데코레이터를 사용하면, 이전에 계산한 값을 재사용하여 크게 성능을 향상시킬 수 있습니다.

lru_cachemaxsize 파라미터로 캐시의 크기를 제한할 수 있습니다. 기본값은 128이며, maxsize=None을 설정하면 캐시 크기의 제한을 해제할 수 있습니다.

Python에서 함수의 성능을 쉽게 향상시키려면 functools.lru_cache를 활용해보세요. 이는 특히 재귀 함수나 반복적인 계산을 수행하는 함수에서 큰 이점을 가져다줍니다.