From e6aa5152964647e548929a10d2d0fe2a7c5d875a Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Mon, 13 Oct 2025 12:28:25 +0200 Subject: [PATCH] gh-140009: Improve performance of `list_extend_dictitems` by using `PyTuple_FromArray` (#140010) --- .../2025-10-12-18-54-06.gh-issue-140009.-MbFh_.rst | 1 + Objects/listobject.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2025-10-12-18-54-06.gh-issue-140009.-MbFh_.rst diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-10-12-18-54-06.gh-issue-140009.-MbFh_.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-10-12-18-54-06.gh-issue-140009.-MbFh_.rst new file mode 100644 index 000000000000..97b35c88e17e --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2025-10-12-18-54-06.gh-issue-140009.-MbFh_.rst @@ -0,0 +1 @@ +Improve performance of list extension by dictionary items. diff --git a/Objects/listobject.c b/Objects/listobject.c index b2903e5c93ee..1722ea60cdc6 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -1382,9 +1382,9 @@ list_extend_dictitems(PyListObject *self, PyDictObject *dict) PyObject **dest = self->ob_item + m; Py_ssize_t pos = 0; Py_ssize_t i = 0; - PyObject *key, *value; - while (_PyDict_Next((PyObject *)dict, &pos, &key, &value, NULL)) { - PyObject *item = PyTuple_Pack(2, key, value); + PyObject *key_value[2]; + while (_PyDict_Next((PyObject *)dict, &pos, &key_value[0], &key_value[1], NULL)) { + PyObject *item = PyTuple_FromArray(key_value, 2); if (item == NULL) { Py_SET_SIZE(self, m + i); return -1; -- 2.47.3