diff options
author | Sergey B Kirpichev <2155800+skirpichev@users.noreply.github.com> | 2021-05-17 07:20:02 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-17 07:20:02 (GMT) |
commit | b102dd598dd2666b72e93ae53ae813d1e88f186c (patch) | |
tree | 06d92560ced1302efbd45e4317fc90282aa8905f | |
parent | b3f65e819f552561294a66e350a9f5a3131f7df2 (diff) | |
download | cpython-b102dd598dd2666b72e93ae53ae813d1e88f186c.zip cpython-b102dd598dd2666b72e93ae53ae813d1e88f186c.tar.gz cpython-b102dd598dd2666b72e93ae53ae813d1e88f186c.tar.bz2 |
bpo-44154: optimize Fraction pickling (GH-26186)
-rw-r--r-- | Lib/fractions.py | 2 | ||||
-rw-r--r-- | Lib/test/test_fractions.py | 4 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2021-05-17-07-24-24.bpo-44154.GRI5bf.rst | 1 |
3 files changed, 5 insertions, 2 deletions
diff --git a/Lib/fractions.py b/Lib/fractions.py index 96047be..64a8959 100644 --- a/Lib/fractions.py +++ b/Lib/fractions.py @@ -735,7 +735,7 @@ class Fraction(numbers.Rational): # support for pickling, copy, and deepcopy def __reduce__(self): - return (self.__class__, (str(self),)) + return (self.__class__, (self._numerator, self._denominator)) def __copy__(self): if type(self) == Fraction: diff --git a/Lib/test/test_fractions.py b/Lib/test/test_fractions.py index b925525..949ddd9 100644 --- a/Lib/test/test_fractions.py +++ b/Lib/test/test_fractions.py @@ -10,6 +10,7 @@ import functools import sys import unittest from copy import copy, deepcopy +import pickle from pickle import dumps, loads F = fractions.Fraction @@ -691,7 +692,8 @@ class FractionTest(unittest.TestCase): def test_copy_deepcopy_pickle(self): r = F(13, 7) dr = DummyFraction(13, 7) - self.assertEqual(r, loads(dumps(r))) + for proto in range(0, pickle.HIGHEST_PROTOCOL + 1): + self.assertEqual(r, loads(dumps(r, proto))) self.assertEqual(id(r), id(copy(r))) self.assertEqual(id(r), id(deepcopy(r))) self.assertNotEqual(id(dr), id(copy(dr))) diff --git a/Misc/NEWS.d/next/Library/2021-05-17-07-24-24.bpo-44154.GRI5bf.rst b/Misc/NEWS.d/next/Library/2021-05-17-07-24-24.bpo-44154.GRI5bf.rst new file mode 100644 index 0000000..3ec326e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-05-17-07-24-24.bpo-44154.GRI5bf.rst @@ -0,0 +1 @@ +Optimize :class:`fractions.Fraction` pickling for large components. |