https://github.com/python/cpython/commit/0147be09d585e6b5e013ea2d1b24c77500d9a083
commit: 0147be09d585e6b5e013ea2d1b24c77500d9a083
branch: main
author: Lukas Geiger <[email protected]>
committer: rhettinger <[email protected]>
date: 2025-03-31T08:23:41-05:00
summary:
gh-131525: Remove `_HashedSeq` wrapper from `lru_cache` (gh-131922)
files:
M Lib/functools.py
diff --git a/Lib/functools.py b/Lib/functools.py
index e0e45bc336c1ef..714070c6ac9460 100644
--- a/Lib/functools.py
+++ b/Lib/functools.py
@@ -516,22 +516,6 @@ def _unwrap_partialmethod(func):
_CacheInfo = namedtuple("CacheInfo", ["hits", "misses", "maxsize", "currsize"])
-class _HashedSeq(list):
- """ This class guarantees that hash() will be called no more than once
- per element. This is important because the lru_cache() will hash
- the key multiple times on a cache miss.
-
- """
-
- __slots__ = 'hashvalue'
-
- def __init__(self, tup, hash=hash):
- self[:] = tup
- self.hashvalue = hash(tup)
-
- def __hash__(self):
- return self.hashvalue
-
def _make_key(args, kwds, typed,
kwd_mark = (object(),),
fasttypes = {int, str},
@@ -561,7 +545,7 @@ def _make_key(args, kwds, typed,
key += tuple(type(v) for v in kwds.values())
elif len(key) == 1 and type(key[0]) in fasttypes:
return key[0]
- return _HashedSeq(key)
+ return key
def lru_cache(maxsize=128, typed=False):
"""Least-recently-used cache decorator.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]