diff --git a/Lib/test/test_dictviews.py b/Lib/test/test_dictviews.py index b15cfebc98912d..7cf019250244bd 100644 --- a/Lib/test/test_dictviews.py +++ b/Lib/test/test_dictviews.py @@ -214,6 +214,17 @@ def test_items_set_operations(self): 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() diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-10-06-15-01-57.bpo-38210.Xgc6F_.rst b/Misc/NEWS.d/next/Core and Builtins/2019-10-06-15-01-57.bpo-38210.Xgc6F_.rst new file mode 100644 index 00000000000000..768c6d4e644a5d --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-10-06-15-01-57.bpo-38210.Xgc6F_.rst @@ -0,0 +1,2 @@ +Remove unecessary intersection and update set operation in dictview with +empty set. (Contributed by Dong-hee Na in :issue:`38210`.) diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 2f86946b985f55..5c3f1fb3c1a25e 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -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; }