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 가 발생합니다.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.