https://github.com/python/cpython/commit/07a9427992a7c5132397bfc7b8fec08a185a4bcc
commit: 07a9427992a7c5132397bfc7b8fec08a185a4bcc
branch: main
author: Seungki Kim <[email protected]>
committer: corona10 <[email protected]>
date: 2026-08-17T14:34:25+09:00
summary:

gh-150942: Optimize stringlib split/splitlines with _PyList_AppendTakeRef 
(gh-155922)

* gh-150942: Optimize stringlib split/splitlines with _PyList_AppendTakeRef

* Delete 
Misc/NEWS.d/next/Core_and_Builtins/2026-08-17-14-00-00.gh-issue-150942.sTrSpL.rst

---------

Co-authored-by: Donghee Na <[email protected]>

files:
M Objects/stringlib/split.h

diff --git a/Objects/stringlib/split.h b/Objects/stringlib/split.h
index 0c11b7214e9b0b8..0b23b6430c8d636 100644
--- a/Objects/stringlib/split.h
+++ b/Objects/stringlib/split.h
@@ -4,6 +4,8 @@
 #error must include "stringlib/fastsearch.h" before including this module
 #endif
 
+#include "pycore_list.h"          // _PyList_AppendTakeRef()
+
 /* Overallocate the initial list to reduce the number of reallocs for small
    split sizes.  Eg, "A A A A A A A A A A".split() (10 elements) has three
    resizes, to sizes 4, 8, then 16.  Most observed string splits are for human
@@ -22,12 +24,8 @@
                         (right) - (left));      \
     if (sub == NULL)                            \
         goto onError;                           \
-    if (PyList_Append(list, sub)) {             \
-        Py_DECREF(sub);                         \
-        goto onError;                           \
-    }                                           \
-    else                                        \
-        Py_DECREF(sub);
+    if (_PyList_AppendTakeRef((PyListObject *)list, sub)) \
+        goto onError;
 
 #define SPLIT_ADD(data, left, right) {          \
     sub = STRINGLIB_NEW((data) + (left),        \
@@ -37,12 +35,8 @@
     if (count < MAX_PREALLOC) {                 \
         PyList_SET_ITEM(list, count, sub);      \
     } else {                                    \
-        if (PyList_Append(list, sub)) {         \
-            Py_DECREF(sub);                     \
+        if (_PyList_AppendTakeRef((PyListObject *)list, sub)) \
             goto onError;                       \
-        }                                       \
-        else                                    \
-            Py_DECREF(sub);                     \
     }                                           \
     count++; }
 

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to