From: Raymond Hettinger Date: Sun, 13 Sep 2015 23:27:01 +0000 (-0400) Subject: Add an exact type match fast path for deque_copy(). X-Git-Tag: v3.6.0a1~1551 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e4f3467df17873db60dd1e8daf61e0c629abb130;p=python Add an exact type match fast path for deque_copy(). --- diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 17233e4089..49a46a153e 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1205,6 +1205,22 @@ deque_traverse(dequeobject *deque, visitproc visit, void *arg) static PyObject * deque_copy(PyObject *deque) { + if (Py_TYPE(deque) == &deque_type) { + dequeobject *new_deque; + PyObject *rv; + + new_deque = (dequeobject *)deque_new(&deque_type, (PyObject *)NULL, (PyObject *)NULL); + if (new_deque == NULL) + return NULL; + new_deque->maxlen = ((dequeobject *)deque)->maxlen; + rv = deque_extend(new_deque, deque); + if (rv != NULL) { + Py_DECREF(rv); + return (PyObject *)new_deque; + } + Py_DECREF(new_deque); + return NULL; + } if (((dequeobject *)deque)->maxlen == -1) return PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "O", deque, NULL); else