diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2019-09-25 06:47:00 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-25 06:47:00 (GMT) |
commit | f163aeaa8c15b806b622c9cb10bc1d2a6e034e24 (patch) | |
tree | 064ac67fe9e980a8062bde811e7918ad6095f701 /Objects | |
parent | ad7736faf5b82a24374c601a72599adf29951080 (diff) | |
download | cpython-f163aeaa8c15b806b622c9cb10bc1d2a6e034e24.zip cpython-f163aeaa8c15b806b622c9cb10bc1d2a6e034e24.tar.gz cpython-f163aeaa8c15b806b622c9cb10bc1d2a6e034e24.tar.bz2 |
bpo-38219: Optimize dict creating and updating by a dict. (GH-16268)
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/dictobject.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 2f24105..2f86946 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -2317,17 +2317,22 @@ dict_update_common(PyObject *self, PyObject *args, PyObject *kwds, result = -1; } else if (arg != NULL) { - _Py_IDENTIFIER(keys); - PyObject *func; - if (_PyObject_LookupAttrId(arg, &PyId_keys, &func) < 0) { - result = -1; - } - else if (func != NULL) { - Py_DECREF(func); + if (PyDict_CheckExact(arg)) { result = PyDict_Merge(self, arg, 1); } else { - result = PyDict_MergeFromSeq2(self, arg, 1); + _Py_IDENTIFIER(keys); + PyObject *func; + if (_PyObject_LookupAttrId(arg, &PyId_keys, &func) < 0) { + result = -1; + } + else if (func != NULL) { + Py_DECREF(func); + result = PyDict_Merge(self, arg, 1); + } + else { + result = PyDict_MergeFromSeq2(self, arg, 1); + } } } |