diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-10-02-16-19-35.gh-issue-158592.V6W21J.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-10-02-16-19-35.gh-issue-158592.V6W21J.rst new file mode 100644 index 00000000000000..a2c8cdd2233c31 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-10-02-16-19-35.gh-issue-158592.V6W21J.rst @@ -0,0 +1,2 @@ +Avoid holding memory much longer than needed after deleting +an item from a list via :keyword:`del`. diff --git a/Objects/listobject.c b/Objects/listobject.c index 81eb3e1102159b..3f0c51904dec2d 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -1148,7 +1148,7 @@ list_ass_item_lock_held(PyListObject *a, Py_ssize_t i, PyObject *v) for (Py_ssize_t idx = i; idx < size - 1; idx++) { FT_ATOMIC_STORE_PTR_RELEASE(a->ob_item[idx], a->ob_item[idx + 1]); } - Py_SET_SIZE(a, size - 1); + list_resize(a, size - 1); // NB: shrinking a list can't fail } else { FT_ATOMIC_STORE_PTR_RELEASE(a->ob_item[i], Py_NewRef(v));