From: Raymond Hettinger Date: Mon, 12 Sep 2016 05:02:28 +0000 (-0700) Subject: Issue #28071: Add early-out for differencing from an empty set. X-Git-Tag: v3.6.0b1~17^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4103e4dfbce8b6d9579565ab64868a721b01d2a1;p=thirdparty%2FPython%2Fcpython.git Issue #28071: Add early-out for differencing from an empty set. --- diff --git a/Misc/NEWS b/Misc/NEWS index 1c253b6366e0..083b33f7dd5e 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -33,6 +33,8 @@ Core and Builtins - Issue #28046: Remove platform-specific directories from sys.path. +- Issue #28071: Add early-out for differencing from an empty set. + - Issue #25758: Prevents zipimport from unnecessarily encoding a filename (patch by Eryk Sun) diff --git a/Objects/setobject.c b/Objects/setobject.c index 6dd403f30fa3..5846045376d6 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -1476,6 +1476,10 @@ PyDoc_STRVAR(isdisjoint_doc, static int set_difference_update_internal(PySetObject *so, PyObject *other) { + if (PySet_GET_SIZE(so) == 0) { + return 0; + } + if ((PyObject *)so == other) return set_clear_internal(so); @@ -1550,6 +1554,10 @@ set_difference(PySetObject *so, PyObject *other) Py_ssize_t pos = 0; int rv; + if (PySet_GET_SIZE(so) == 0) { + return set_copy(so); + } + if (!PyAnySet_Check(other) && !PyDict_CheckExact(other)) { return set_copy_and_difference(so, other); }