A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://mail.python.org/pipermail/python-dev/2011-July/112488.html below:

[Python-Dev] tuple[int] optimization

[Python-Dev] tuple[int] optimization [Python-Dev] tuple[int] optimizationAndrew Svetlov andrew.svetlov at gmail.com
Sun Jul 24 00:20:08 CEST 2011
tuple[int] is 30% slower than list[int].
Please let me explain the problem.

(1, 2, 3)[1] has compiled as BINARY_SUBSCR operation.
ceval.c has optimization for list:

        case BINARY_SUBSCR:
            w = POP();
            v = TOP();
            if (PyList_CheckExact(v) && PyInt_CheckExact(w)) {
                /* INLINE: list[int] */
                Py_ssize_t i = PyInt_AsSsize_t(w);
                if (i < 0)
                    i += PyList_GET_SIZE(v);
                if (i >= 0 && i < PyList_GET_SIZE(v)) {
                    x = PyList_GET_ITEM(v, i);
                    Py_INCREF(x);
                }
                else
                    goto slow_get;
            }
            else
              slow_get:
                x = PyObject_GetItem(v, w);
            Py_DECREF(v);
            Py_DECREF(w);
            SET_TOP(x);
            if (x != NULL) continue;
            break;

For tuple code follows slow way via tp_as_mapping slot and calls
tuplesubscript from Objects/tupleobject.c

Looks like tuple is goot applicant to be optimized as list does.
tuples is used in python programs very often and getting element from
tuple by index as common operation as list[int].

Is there reasons to prevent special case for tuples in BINARY_SUBSCR?
More information about the Python-Dev mailing list

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4