bpo-38219: Optimize dict creating and updating by a dict. (GH-16268)
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 @@
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);
+ }
}
}