changeset: 100105:5772eae17a82 branch: 3.5 parent: 100102:687be1cbe587 user: Serhiy Storchaka date: Thu Jan 28 21:43:35 2016 +0200 files: Lib/copy.py Lib/test/test_copy.py Misc/NEWS description: Issue #26202: copy.deepcopy() now correctly copies range() objects with non-atomic attributes. diff -r 687be1cbe587 -r 5772eae17a82 Lib/copy.py --- a/Lib/copy.py Thu Jan 28 21:30:16 2016 +0200 +++ b/Lib/copy.py Thu Jan 28 21:43:35 2016 +0200 @@ -207,7 +207,6 @@ except AttributeError: pass d[type] = _deepcopy_atomic -d[range] = _deepcopy_atomic d[types.BuiltinFunctionType] = _deepcopy_atomic d[types.FunctionType] = _deepcopy_atomic d[weakref.ref] = _deepcopy_atomic diff -r 687be1cbe587 -r 5772eae17a82 Lib/test/test_copy.py --- a/Lib/test/test_copy.py Thu Jan 28 21:30:16 2016 +0200 +++ b/Lib/test/test_copy.py Thu Jan 28 21:43:35 2016 +0200 @@ -314,7 +314,7 @@ pass tests = [None, 42, 2**100, 3.14, True, False, 1j, "hello", "hello\u1234", f.__code__, - NewStyle, range(10), Classic, max] + NewStyle, Classic, max] for x in tests: self.assertIs(copy.deepcopy(x), x) @@ -536,6 +536,17 @@ self.assertIsNot(y, x) self.assertIs(y.foo, y) + def test_deepcopy_range(self): + class I(int): + pass + x = range(I(10)) + y = copy.deepcopy(x) + self.assertIsNot(y, x) + self.assertEqual(y, x) + self.assertIsNot(y.stop, x.stop) + self.assertEqual(y.stop, x.stop) + self.assertIsInstance(y.stop, I) + # _reconstruct() def test_reconstruct_string(self): diff -r 687be1cbe587 -r 5772eae17a82 Misc/NEWS --- a/Misc/NEWS Thu Jan 28 21:30:16 2016 +0200 +++ b/Misc/NEWS Thu Jan 28 21:43:35 2016 +0200 @@ -66,6 +66,9 @@ Library ------- +- Issue #26202: copy.deepcopy() now correctly copies range() objects with + non-atomic attributes. + - Issue #19883: Fixed possible integer overflows in zipimport. - Issue #26227: On Windows, getnameinfo(), gethostbyaddr() and