bpo-38210: Fix intersection operation with dict view and iterator. (GH-16602)
This commit is contained in:
parent
65dcc8a8dc
commit
c38e725d17
|
@ -214,6 +214,17 @@ class DictSetTest(unittest.TestCase):
|
|||
self.assertTrue(de.items().isdisjoint(de.items()))
|
||||
self.assertTrue(de.items().isdisjoint([1]))
|
||||
|
||||
def test_set_operations_with_iterator(self):
|
||||
origin = {1: 2, 3: 4}
|
||||
self.assertEqual(origin.keys() & iter([1, 2]), {1})
|
||||
self.assertEqual(origin.keys() | iter([1, 2]), {1, 2, 3})
|
||||
self.assertEqual(origin.keys() ^ iter([1, 2]), {2, 3})
|
||||
|
||||
items = origin.items()
|
||||
self.assertEqual(items & iter([(1, 2)]), {(1, 2)})
|
||||
self.assertEqual(items ^ iter([(1, 2)]), {(3, 4)})
|
||||
self.assertEqual(items | iter([(1, 2)]), {(1, 2), (3, 4)})
|
||||
|
||||
def test_recursive_repr(self):
|
||||
d = {}
|
||||
d[42] = d.values()
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Remove unecessary intersection and update set operation in dictview with
|
||||
empty set. (Contributed by Dong-hee Na in :issue:`38210`.)
|
|
@ -4225,14 +4225,6 @@ _PyDictView_Intersect(PyObject* self, PyObject *other)
|
|||
|
||||
it = PyObject_GetIter(other);
|
||||
|
||||
_Py_IDENTIFIER(intersection_update);
|
||||
tmp = _PyObject_CallMethodIdOneArg(result, &PyId_intersection_update, other);
|
||||
if (tmp == NULL) {
|
||||
Py_DECREF(result);
|
||||
return NULL;
|
||||
}
|
||||
Py_DECREF(tmp);
|
||||
|
||||
if (PyDictKeys_Check(self)) {
|
||||
dict_contains = dictkeys_contains;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue