diff options
Diffstat (limited to 'Objects/dictobject.c')
-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); + } } } |