Fix a bug in the way __getnewargs__ was handled.
diff --git a/Lib/copy.py b/Lib/copy.py
index 9f8386e..739cf2d 100644
--- a/Lib/copy.py
+++ b/Lib/copy.py
@@ -128,7 +128,7 @@
         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 846e675..c97d54d 100644
--- a/Lib/test/test_copy.py
+++ b/Lib/test/test_copy.py
@@ -454,6 +454,24 @@
         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))