Commit 7832cd61 authored by Raymond Hettinger's avatar Raymond Hettinger

Apply tuple/list pre-sizing optimization to a broader class of objects.

Formerly, length data fetched from sequence objects.
Now, any object that reports its length can benefit from pre-sizing.

On one sample timing, it gave a threefold speedup for list(s) where s
was a set object.
parent 674d56b8
......@@ -1380,7 +1380,7 @@ PySequence_Tuple(PyObject *v)
return NULL;
/* Guess result size and allocate space. */
n = PySequence_Size(v);
n = PyObject_Size(v);
if (n < 0) {
PyErr_Clear();
n = 10; /* arbitrary */
......
......@@ -2266,15 +2266,11 @@ list_fill(PyListObject *result, PyObject *v)
return -1;
/* Guess a result list size. */
n = -1; /* unknown */
if (PySequence_Check(v) &&
v->ob_type->tp_as_sequence->sq_length) {
n = PySequence_Size(v);
if (n < 0)
PyErr_Clear();
}
if (n < 0)
n = PyObject_Size(v);
if (n < 0) {
PyErr_Clear();
n = 8; /* arbitrary */
}
NRESIZE(result->ob_item, PyObject*, n);
if (result->ob_item == NULL) {
PyErr_NoMemory();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment