summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authord.grigonis <dgrigonis@users.noreply.github.com>2024-05-11 20:55:23 (GMT)
committerGitHub <noreply@github.com>2024-05-11 20:55:23 (GMT)
commitcd4cfa6ed2fd5f866c7be339f1d3cf56aa4d2bad (patch)
tree4eeb04d2ba3bf799e4b688d79e8d03703f76c7e2
parent7e894c2f38f64aed9b259c8fd31880f1142a259d (diff)
downloadcpython-cd4cfa6ed2fd5f866c7be339f1d3cf56aa4d2bad.zip
cpython-cd4cfa6ed2fd5f866c7be339f1d3cf56aa4d2bad.tar.gz
cpython-cd4cfa6ed2fd5f866c7be339f1d3cf56aa4d2bad.tar.bz2
gh-118932: ChainMap.__contains__ performance improvement (gh-118946)
-rw-r--r--Lib/collections/__init__.py7
1 files changed, 5 insertions, 2 deletions
diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py
index d06d84c..a17100e 100644
--- a/Lib/collections/__init__.py
+++ b/Lib/collections/__init__.py
@@ -1016,7 +1016,7 @@ class ChainMap(_collections_abc.MutableMapping):
return self.__missing__(key) # support subclasses that define __missing__
def get(self, key, default=None):
- return self[key] if key in self else default
+ return self[key] if key in self else default # needs to make use of __contains__
def __len__(self):
return len(set().union(*self.maps)) # reuses stored hash values if possible
@@ -1028,7 +1028,10 @@ class ChainMap(_collections_abc.MutableMapping):
return iter(d)
def __contains__(self, key):
- return any(key in m for m in self.maps)
+ for mapping in self.maps:
+ if key in mapping:
+ return True
+ return False
def __bool__(self):
return any(self.maps)