bpo-44154: optimize Fraction pickling (GH-26186)

This commit is contained in:
Sergey B Kirpichev 2021-05-17 10:20:02 +03:00 committed by GitHub
parent b3f65e819f
commit b102dd598d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 5 additions and 2 deletions

View File

@ -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:

View File

@ -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)))

View File

@ -0,0 +1 @@
Optimize :class:`fractions.Fraction` pickling for large components.