diff -r a5e52b7be71f Objects/dictobject.c --- a/Objects/dictobject.c Fri Nov 04 16:34:46 2016 +0900 +++ b/Objects/dictobject.c Fri Nov 18 19:55:37 2016 +0900 @@ -388,7 +388,7 @@ dk_set_index(PyDictKeysObject *keys, Py_ * This can be used to reserve enough size to insert n entries without * resizing. */ -#define ESTIMATE_SIZE(n) (((n)*3) >> 1) +#define ESTIMATE_SIZE(n) (((n)*3+1) >> 1) /* Alternative fraction that is otherwise close enough to 2n/3 to make * little difference. 8 * 2/3 == 8 * 5/8 == 5. 16 * 2/3 == 16 * 5/8 == 10. @@ -1355,10 +1355,11 @@ make_keys_shared(PyObject *op) PyObject * _PyDict_NewPresized(Py_ssize_t minused) { + Py_ssize_t minsize = ESTIMATE_SIZE(minused); Py_ssize_t newsize; PyDictKeysObject *new_keys; for (newsize = PyDict_MINSIZE; - newsize <= minused && newsize > 0; + newsize < minsize && newsize > 0; newsize <<= 1) ; new_keys = new_keys_object(newsize);