diff options
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 2f24105835..2f86946b98 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); +            }          }      }  | 
