diff --git a/Misc/NEWS.d/next/Library/2026-02-05-17-59-01.gh-issue-140009.bYXcvi.rst b/Misc/NEWS.d/next/Library/2026-02-05-17-59-01.gh-issue-140009.bYXcvi.rst new file mode 100644 index 00000000000000..445278caf0d083 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-02-05-17-59-01.gh-issue-140009.bYXcvi.rst @@ -0,0 +1 @@ +Improve performance of datetime extension module. Patch by Taegyun Kim. diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index dbd14f1d707077..f49e434f7255c5 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -4521,7 +4521,7 @@ timezone_getinitargs(PyObject *op, PyObject *Py_UNUSED(dummy)) { PyDateTime_TimeZone *self = PyTimeZone_CAST(op); if (self->name == NULL) - return PyTuple_Pack(1, self->offset); + return PyTuple_FromArray((PyObject*[]){ self->offset }, 1); return _PyTuple_FromPair(self->offset, self->name); } @@ -5283,7 +5283,7 @@ time_getstate(PyDateTime_Time *self, int proto) /* Set the first bit of the first byte */ PyBytes_AS_STRING(basestate)[0] |= (1 << 7); if (! HASTZINFO(self) || self->tzinfo == Py_None) - result = PyTuple_Pack(1, basestate); + result = PyTuple_FromArray((PyObject*[]){ basestate }, 1); else result = _PyTuple_FromPair(basestate, self->tzinfo); Py_DECREF(basestate); @@ -7215,7 +7215,7 @@ datetime_getstate(PyDateTime_DateTime *self, int proto) /* Set the first bit of the third byte */ PyBytes_AS_STRING(basestate)[2] |= (1 << 7); if (! HASTZINFO(self) || self->tzinfo == Py_None) - result = PyTuple_Pack(1, basestate); + result = PyTuple_FromArray((PyObject*[]){ basestate }, 1); else result = _PyTuple_FromPair(basestate, self->tzinfo); Py_DECREF(basestate);