From: Raymond Hettinger Date: Tue, 9 Feb 2016 04:34:49 +0000 (-0800) Subject: Issue #26200: The SETREF macro adds unnecessary work in some cases. X-Git-Tag: v3.6.0a1~628 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=38418662e0339b6331e0c7e00ea55f41b28bf38d;p=python Issue #26200: The SETREF macro adds unnecessary work in some cases. --- diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 479b0525a6..0b7a88f974 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1218,6 +1218,7 @@ deque_del_item(dequeobject *deque, Py_ssize_t i) static int deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v) { + PyObject *old_value; block *b; Py_ssize_t n, len=Py_SIZE(deque), halflen=(len+1)>>1, index=i; @@ -1246,7 +1247,9 @@ deque_ass_item(dequeobject *deque, Py_ssize_t i, PyObject *v) b = b->leftlink; } Py_INCREF(v); - Py_SETREF(b->data[i], v); + old_value = b->data[i]; + b->data[i] = v; + Py_DECREF(old_value); return 0; }