Детали работы `functools.lru_cache`
Python
Senior
Яндекс
Как работает `functools.lru_cache`? Какие ограничения есть у функций, к которым его можно применять, и что происходит при `maxsize=None`?
Ответы
LRU cache
`lru_cache` кеширует результаты функции по её позиционным и именованным аргументам, используя словарь + двусвязный список (LRU).
Ограничения:
- аргументы должны быть хешируемыми (используются как ключи словаря);
- не стоит использовать для функций с побочными эффектами (кеш сломает семантику).
`maxsize=None` превращает кеш в неограниченный (по сути обычный memoization без вытеснения). Это может привести к утечке памяти при большом разнообразии аргументов.