Cache hash value for FrozenSets

Adds a hash field to the `PyFrozenSet` data type in order to avoid
recomputing the hash of an immutable object.
This commit is contained in:
Ankit Goel
2024-09-21 20:55:28 +01:00
parent eeb719e8f7
commit 48025e0102
2 changed files with 41 additions and 12 deletions

10
Lib/test/test_set.py vendored
View File

@@ -728,15 +728,7 @@ class TestFrozenSet(TestJointOps, unittest.TestCase):
for i in range(len(s)+1):
yield from map(frozenset, itertools.combinations(s, i))
# TODO: RUSTPYTHON
# The original test has:
# for n in range(18):
# Due to general performance overhead, hashing a frozenset takes
# about 50 times longer than in CPython. This test amplifies that
# exponentially, so the best we can do here reasonably is 13.
# Even if the internal hash function did nothing, it would still be
# about 40 times slower than CPython.
for n in range(13):
for n in range(18):
t = 2 ** n
mask = t - 1
for nums in (range, zf_range):