From: Guido van Rossum Date: Thu, 6 Feb 2003 21:25:12 +0000 (+0000) Subject: Fix a bug in the way __getnewargs__ was handled. X-Git-Tag: v2.3c1~1986 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=85233bf74679a5dae4365507526789883a3c1158;p=python Fix a bug in the way __getnewargs__ was handled. --- diff --git a/Lib/copy.py b/Lib/copy.py index 9f8386e0bd..739cf2d7cd 100644 --- a/Lib/copy.py +++ b/Lib/copy.py @@ -128,7 +128,7 @@ def _better_reduce(obj): listitems = iter(obj) elif isinstance(obj, dict): dictitems = obj.iteritems() - return __newobj__, (cls, args), state, listitems, dictitems + return __newobj__, (cls,) + args, state, listitems, dictitems _copy_dispatch = d = {} diff --git a/Lib/test/test_copy.py b/Lib/test/test_copy.py index 846e675cf4..c97d54d749 100644 --- a/Lib/test/test_copy.py +++ b/Lib/test/test_copy.py @@ -454,6 +454,24 @@ class TestCopy(unittest.TestCase): self.assert_(x[0] is not y[0]) self.assert_(x.foo is not y.foo) + def test_copy_tuple_subclass(self): + class C(tuple): + pass + x = C([1, 2, 3]) + self.assertEqual(tuple(x), (1, 2, 3)) + y = copy.copy(x) + self.assertEqual(tuple(y), (1, 2, 3)) + + def test_deepcopy_tuple_subclass(self): + class C(tuple): + pass + x = C([[1, 2], 3]) + self.assertEqual(tuple(x), ([1, 2], 3)) + y = copy.deepcopy(x) + self.assertEqual(tuple(y), ([1, 2], 3)) + self.assert_(x is not y) + self.assert_(x[0] is not y[0]) + def test_main(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestCopy))