User Tools

Site Tools


python3:lru_cache

This is an old revision of the document!


bb

LRU Cache

Memoization is a common optimization technique where repeatedly computed values are cached for quick lookup. While memoization can be achieved by a relatively simple modification to many recursive formulations, Python3's functools library implements automatic memoization in the form of an LRU (least recently used) cache as a function decorator.

The Fibonacci Sequence

The Fibonacci sequence (fn = fn-1+fn-2) is a canonical example of a naive recursive function with exponential complexity.

fibonacci.py
def fib(n):
    if n < 2:
        return 1
    return fib(n-1) + fib(n-2)
 
print(fib(40))
fibonacci_lru.py
from functools import *
 
@lru_cache(maxsize=None)
 
def fib(n):
    if n < 1:
        return n
    return fib(n-1) + fib(n-2)
 
print(fib(300))

Benchmarks

1)

n fibonacci.py fibonacci_lru.py
10 .016s .0224s
20 .0216s .0232s
30 .4664s .0216s
40 - .0248s
50 - .024s
1)
Python 3.5.2
python3/lru_cache.1557248428.txt.gz · Last modified: 2019/05/07 12:00 by jguerin