From: Raymond Hettinger Date: Mon, 19 Feb 2007 20:44:04 +0000 (+0000) Subject: Fixup set/dict interoperability. X-Git-Tag: v2.6a1~2156 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=15cade0568f5028c9508c480e5d8fb9166e71f0e;p=python Fixup set/dict interoperability. --- diff --git a/Objects/setobject.c b/Objects/setobject.c index 1f06cee5a1..07ba99641c 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -919,7 +919,18 @@ set_update_internal(PySetObject *so, PyObject *other) PyObject *value; Py_ssize_t pos = 0; long hash; + Py_ssize_t dictsize = PyDict_Size(other); + /* Do one big resize at the start, rather than + * incrementally resizing as we insert new keys. Expect + * that there will be no (or few) overlapping keys. + */ + if (dictsize == -1) + return -1; + if ((so->fill + dictsize)*3 >= (so->mask+1)*2) { + if (set_table_resize(so, (so->used + dictsize)*2) != 0) + return -1; + } while (_PyDict_Next(other, &pos, &key, &value, &hash)) { setentry an_entry;