PHpullh
학습 라이브러리/Python/메모이제이션 (lru_cache)

PYTHON · 함수

메모이제이션 (lru_cache)

functools.lru_cache로 함수 결과를 캐싱하여 중복 계산을 방지합니다. 재귀 함수 성능을 극적으로 향상시킵니다.

함수중급lru_cachecache메모이제이션functools

핵심 설명

functools.lru_cache로 함수 결과를 캐싱하여 중복 계산을 방지합니다. 재귀 함수 성능을 극적으로 향상시킵니다.

Python code

from functools import lru_cache, cache
import time

@lru_cache(maxsize=128)
def fibonacci(n: int) -> int:
    if n < 2:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

start = time.perf_counter()
print(fibonacci(100))  # 354224848179261915075
print(f"시간: {time.perf_counter()-start:.6f}초")

# 캐시 정보
print(fibonacci.cache_info())
# CacheInfo(hits=98, misses=101, maxsize=128, currsize=101)

# cache (Python 3.9+) = lru_cache(maxsize=None)
@cache
def factorial(n):
    return 1 if n <= 1 else n * factorial(n - 1)

print(factorial(10))  # 3628800

# 캐시 초기화
fibonacci.cache_clear()

학습 팁

인자가 해시 가능해야 캐싱됩니다. 리스트 인자는 튜플로 변환하세요.

주의할 점

lru_cache는 인자를 키로 사용하므로 mutable 객체(리스트, 딕셔너리)를 인자로 전달하면 TypeError가 발생합니다.

자주 묻는 질문

메모이제이션 (lru_cache)란 무엇인가요?

functools.lru_cache 로 함수 결과를 캐싱하여 중복 계산을 방지합니다. 재귀 함수 성능을 극적으로 향상시킵니다.

메모이제이션 (lru_cache) 학습 시 주의할 점은 무엇인가요?

lru_cache 는 인자를 키로 사용하므로 mutable 객체(리스트, 딕셔너리)를 인자로 전달하면 TypeError 가 발생합니다.