From d2afefa99a72de1a48b6fe0aa52123fb553397f6 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Wed, 14 Jan 2026 13:03:22 -0600 Subject: [PATCH] gh-143825: Micro-optimizations to _make_key. --- Lib/functools.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Lib/functools.py b/Lib/functools.py index 836eb680ccd4d4..075418b1605a48 100644 --- a/Lib/functools.py +++ b/Lib/functools.py @@ -517,7 +517,7 @@ def _unwrap_partialmethod(func): ### LRU Cache function decorator ################################################################################ -_CacheInfo = namedtuple("CacheInfo", ["hits", "misses", "maxsize", "currsize"]) +_CacheInfo = namedtuple("CacheInfo", ("hits", "misses", "maxsize", "currsize")) def _make_key(args, kwds, typed, kwd_mark = (object(),), @@ -539,13 +539,15 @@ def _make_key(args, kwds, typed, # distinct call from f(y=2, x=1) which will be cached separately. key = args if kwds: + key = list(key) key += kwd_mark for item in kwds.items(): key += item + key = tuple(key) if typed: - key += tuple(type(v) for v in args) + key += tuple([type(v) for v in args]) if kwds: - key += tuple(type(v) for v in kwds.values()) + key += tuple([type(v) for v in kwds.values()]) elif len(key) == 1 and type(key[0]) in fasttypes: return key[0] return key