Browse Source

bpo-38219: Optimize dict creating and updating by a dict. (GH-16268)

pull/16381/head
Serhiy Storchaka 7 years ago
committed by GitHub
parent
commit
f163aeaa8c
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      Misc/NEWS.d/next/Core and Builtins/2019-09-22-13-56-18.bpo-38219.rFl7JD.rst
  2. 21
      Objects/dictobject.c

2
Misc/NEWS.d/next/Core and Builtins/2019-09-22-13-56-18.bpo-38219.rFl7JD.rst

@ -0,0 +1,2 @@
Optimized the :class:`dict` constructor and the :meth:`~dict.update` method
for the case when the argument is a dict.

21
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);
}
}
}

Loading…
Cancel
Save