Kaydet (Commit) b86269db authored tarafından Raymond Hettinger's avatar Raymond Hettinger

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

Formerly, the length was only fetched from sequence objects.
Now, any object that reports its length can benefit from pre-sizing.
üst 4618cc09
......@@ -1448,15 +1448,11 @@ PySequence_List(PyObject *v)
return NULL;
/* 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)
n = PyObject_Size(v);
if (n < 0) {
PyErr_Clear();
}
if (n < 0)
n = 8; /* arbitrary */
}
result = PyList_New(n);
if (result == NULL) {
Py_DECREF(it);
......
......@@ -153,15 +153,11 @@ builtin_filter(PyObject *self, PyObject *args)
return NULL;
/* Guess a result list size. */
len = -1; /* unknown */
if (PySequence_Check(seq) &&
seq->ob_type->tp_as_sequence->sq_length) {
len = PySequence_Size(seq);
if (len < 0)
len = PyObject_Size(seq);
if (len < 0) {
PyErr_Clear();
}
if (len < 0)
len = 8; /* arbitrary */
}
/* Pre-allocate argument list tuple. */
arg = PyTuple_New(1);
......
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