We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
defaultdict
1 parent f93834f commit 5a5f522Copy full SHA for 5a5f522
2 files changed
Lib/test/test_defaultdict.py
@@ -51,7 +51,11 @@ def test_missing(self):
51
d1 = defaultdict()
52
self.assertRaises(KeyError, d1.__missing__, 42)
53
d1.default_factory = list
54
- self.assertEqual(d1.__missing__(42), [])
+ v1 = d1.__missing__(42)
55
+ self.assertEqual(v1, [])
56
+ v2 = d1.__missing__(42)
57
+ self.assertEqual(v2, [])
58
+ self.assertIsNot(v2, v1)
59
60
def test_repr(self):
61
@@ -186,7 +190,7 @@ def test_union(self):
186
190
with self.assertRaises(TypeError):
187
191
i |= None
188
192
189
- def test_factory_conflict_with_set_value(self):
193
+ def test_reentering_getitem_method(self):
194
key = "conflict_test"
195
count = 0
196
@@ -201,7 +205,7 @@ def default_factory():
201
205
test_dict = defaultdict(default_factory)
202
206
203
207
self.assertEqual(count, 0)
204
- self.assertEqual(test_dict[key], 2)
208
+ self.assertEqual(test_dict[key], 1)
209
self.assertEqual(count, 2)
210
211
def test_repr_recursive_factory(self):
Modules/_collectionsmodule.c
@@ -2247,11 +2247,11 @@ defdict_missing(PyObject *op, PyObject *key)
2247
value = _PyObject_CallNoArgs(factory);
2248
if (value == NULL)
2249
return value;
2250
- PyObject *result = NULL;
2251
- (void)PyDict_SetDefaultRef(op, key, value, &result);
2252
- // 'result' is NULL, or a strong reference to 'value' or 'op[key]'
2253
- Py_DECREF(value);
2254
- return result;
+ if (PyObject_SetItem(op, key, value) < 0) {
+ Py_DECREF(value);
+ return NULL;
+ }
+ return value;
2255
}
2256
2257
static inline PyObject*
0 commit comments