summaryrefslogtreecommitdiffstats
path: root/Objects/dictobject.c
diff options
context:
space:
mode:
authorINADA Naoki <methane@users.noreply.github.com>2018-04-17 06:53:34 (GMT)
committerGitHub <noreply@github.com>2018-04-17 06:53:34 (GMT)
commit5fbc511f56688654a05b9eba23d140318bb9b2d5 (patch)
tree997259ef50c3ef66fb9ee6ea339f0d7089c61509 /Objects/dictobject.c
parentacfb087f9f5590e5174a30eced3c2fe911f49d70 (diff)
downloadcpython-5fbc511f56688654a05b9eba23d140318bb9b2d5.zip
cpython-5fbc511f56688654a05b9eba23d140318bb9b2d5.tar.gz
cpython-5fbc511f56688654a05b9eba23d140318bb9b2d5.tar.bz2
bpo-33205: dict: Change GROWTH_RATE to `used*3` (GH-6350)
Diffstat (limited to 'Objects/dictobject.c')
-rw-r--r--Objects/dictobject.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index be895d4..01d913b 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -396,17 +396,16 @@ dk_set_index(PyDictKeysObject *keys, Py_ssize_t i, Py_ssize_t ix)
*/
/* GROWTH_RATE. Growth rate upon hitting maximum load.
- * Currently set to used*2 + capacity/2.
+ * Currently set to used*3.
* This means that dicts double in size when growing without deletions,
* but have more head room when the number of deletions is on a par with the
- * number of insertions.
- * Raising this to used*4 doubles memory consumption depending on the size of
- * the dictionary, but results in half the number of resizes, less effort to
- * resize.
+ * number of insertions. See also bpo-17563 and bpo-33205.
+ *
* GROWTH_RATE was set to used*4 up to version 3.2.
* GROWTH_RATE was set to used*2 in version 3.3.0
+ * GROWTH_RATE was set to used*2 + capacity/2 in 3.4.0-3.6.0.
*/
-#define GROWTH_RATE(d) (((d)->ma_used*2)+((d)->ma_keys->dk_size>>1))
+#define GROWTH_RATE(d) ((d)->ma_used*3)
#define ENSURE_ALLOWS_DELETIONS(d) \
if ((d)->ma_keys->dk_lookup == lookdict_unicode_nodummy) { \