diff options
author | INADA Naoki <songofacandy@gmail.com> | 2016-10-27 19:30:10 +0900 |
---|---|---|
committer | INADA Naoki <songofacandy@gmail.com> | 2016-10-27 19:30:10 +0900 |
commit | b574e77122f25b41fe6ed27744a8089bfb6b82ea (patch) | |
tree | df5839616a9bba192b560dc329a22d40c9e2f0fe /Objects/dictobject.c | |
parent | 6743999d74ab665c621e003c843bc23692ee969e (diff) | |
parent | b1152be2def8d4073cbb0ac3c05aed88d5e8360f (diff) | |
download | cpython-git-b574e77122f25b41fe6ed27744a8089bfb6b82ea.tar.gz |
Issue #28509: dict.update() no longer allocate unnecessary large memory
Diffstat (limited to 'Objects/dictobject.c')
-rw-r--r-- | Objects/dictobject.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 2cca2c678e..3c54926256 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -2407,9 +2407,11 @@ dict_merge(PyObject *a, PyObject *b, int override) * incrementally resizing as we insert new items. Expect * that there will be no (or few) overlapping keys. */ - if (mp->ma_keys->dk_usable * 3 < other->ma_used * 2) - if (dictresize(mp, (mp->ma_used + other->ma_used)*2) != 0) + if (USABLE_FRACTION(mp->ma_keys->dk_size) < other->ma_used) { + if (dictresize(mp, ESTIMATE_SIZE(mp->ma_used + other->ma_used))) { return -1; + } + } ep0 = DK_ENTRIES(other->ma_keys); for (i = 0, n = other->ma_keys->dk_nentries; i < n; i++) { PyObject *key, *value; |