10000 bpo-44154: optimize Fraction pickling (GH-26186) · python/cpython@b102dd5 · GitHub
[go: up one dir, main page]

Skip to content

Commit b102dd5

Browse files
authored
bpo-44154: optimize Fraction pickling (GH-26186)
1 parent b3f65e8 commit b102dd5

File tree

3 files changed

+5
-2
lines changed

3 files changed

+5
-2
lines changed

Lib/fractions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,7 @@ def __bool__(a):
735735
# support for pickling, copy, and deepcopy
736736

737737
def __reduce__(self):
738-
return (self.__class__, (str(self),))
738+
return (self.__class__, (self._numerator, self._denominator))
739739

740740
def __copy__(self):
741741
if type(self) == Fraction:

Lib/test/test_fractions.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import sys
1111
import unittest
1212
from copy import copy, deepcopy
13+
import pickle
1314
from pickle import dumps, loads
1415
F = fractions.Fraction
1516

@@ -691,7 +692,8 @@ def testApproximateCos1(self):
691692
def test_copy_deepcopy_pickle(self):
692693
r = F(13, 7)
693694
dr = DummyFraction(13, 7)
694-
self.assertEqual(r, loads(dumps(r)))
695+
for proto in range(0, pickle.HIGHEST_PROTOCOL + 1):
696+
self.assertEqual(r, loads(dumps(r, proto)))
695697
self.assertEqual(id(r), id(copy(r)))
696698
self.assertEqual(id(r), id(deepcopy(r)))
697699
self.assertNotEqual(id(dr), id(copy(dr)))
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Optimize :class:`fractions.Fraction` pickling for large components.

0 commit comments

Comments
 (0)
0