Message393781
The current version of the Fraction.__reduce__() method uses str(), which produces bigger dumps, esp. for large components.
C.f.:
>>> import random, pickle
>>> from fractions import Fraction as F
>>> random.seed(1); a = F(*random.random().as_integer_ratio())
>>> for proto in range(pickle.HIGHEST_PROTOCOL + 1):
... print(len(pickle.dumps(a, proto)))
...
71
70
71
71
77
77
>>> b = a**13
>>> for proto in range(pickle.HIGHEST_PROTOCOL + 1):
... print(len(pickle.dumps(b, proto)))
...
444
443
444
444
453
453
vs the attached patch:
>>> for proto in range(pickle.HIGHEST_PROTOCOL + 1):
... print(len(pickle.dumps(a, proto)))
...
71
68
49
49
59
59
>>> for proto in range(pickle.HIGHEST_PROTOCOL + 1):
... print(len(pickle.dumps(b, proto)))
...
444
441
204
204
214
214
Testing for non-default protocols was also added. Let me know if all this does make sense as a PR. |
|
Date |
User |
Action |
Args |
2021-05-17 03:58:34 | Sergey.Kirpichev | set | recipients:
+ Sergey.Kirpichev |
2021-05-17 03:58:34 | Sergey.Kirpichev | set | messageid: <1621223914.12.0.379949005457.issue44154@roundup.psfhosted.org> |
2021-05-17 03:58:34 | Sergey.Kirpichev | link | issue44154 messages |
2021-05-17 03:58:33 | Sergey.Kirpichev | create | |
|