lru_cache는 「함수의 결과를 자동으로 기억해 두고, 같은 인자로 다시 호출되면 즉시 결과를 돌려주는」 데코레이터입니다.
같은 계산을 반복하는 함수의 속도를 극적으로 끌어올릴 수 있습니다.
기본 사용.
from functools import lru_cache.
@lru_cache(maxsize=128).
def slow_func(n): ...
— 함수 위에 데코레이터 한 줄을 붙이면 자동으로 캐시가 동작합니다.
maxsize는 「가장 최근 호출된 N개를 캐시 유지」 — 기본값 128.
전형적 활용 예시는 「피보나치 수열」입니다.
재귀 피보나치는 같은 계산을 수없이 반복해 매우 느린데, @lru_cache 한 줄을 붙이면 즉시 빨라집니다.
fib(40)이 캐시 없이는 분 단위, 캐시 있으면 밀리초 단위가 됩니다.
활용 시 주의점.
1) 함수 인자가 「해시 가능」해야 함(리스트는 불가, 튜플은 OK).
2) 함수가 「순수 함수」여야 함(같은 입력에 항상 같은 결과).
외부 상태에 의존하면 캐시된 옛 결과가 잘못 반환될 수 있습니다.
Python 3.9+에는 더 단순한 @cache가 추가됐습니다.
maxsize 무제한의 lru_cache와 같은 효과로, @lru_cache(maxsize=None)을 더 간결하게 쓴 형태입니다.
메모리가 충분하고 인자 종류가 한정적이면 @cache가 편리합니다.
한 줄 요약
@lru_cache는 함수 결과를 자동 캐시하는 데코레이터로, 재귀 피보나치 같은 반복 계산을 극적으로 빠르게 만듭니다.
인자가 해시 가능하고 순수 함수여야 합니다.
더 알아볼 것
- @cache — Python 3.9+ 단순 버전
- cache_info()로 캐시 통계 보기
- memoization 패턴의 일반화