Skip to content

Commit 69b65ef

Browse files
committed
collections.defaultdict: Implement __contains__.
Otherwise, "in" operation uses list protocol (enumeration using __getitem__, which adds a key/value pair to teh underlying dict) and ends with memory overflow.
1 parent 56dd0f9 commit 69b65ef

File tree

2 files changed

+5
-0
lines changed

2 files changed

+5
-0
lines changed

collections.defaultdict/collections/defaultdict.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ def __setitem__(self, key, v):
2727
def __delitem__(self, key):
2828
del self.d[key]
2929

30+
def __contains__(self, key):
31+
return key in self.d
32+
3033
def __missing__(self, key):
3134
if self.default_factory is None:
3235
raise KeyError(key)

collections.defaultdict/test_defaultdict.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@
66
assert d[2] == 3
77
del d[1]
88
assert d[1] == 42
9+
10+
assert "foo" not in d

0 commit comments

Comments
 (0)