bpo-38405: Make nested subclasses of typing.NamedTuple pickleable. (GH-16641)

diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index 97e6d88..49417ef 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -3468,6 +3468,9 @@
 
 
 class NamedTupleTests(BaseTestCase):
+    class NestedEmployee(NamedTuple):
+        name: str
+        cool: int
 
     def test_basics(self):
         Emp = NamedTuple('Emp', [('name', str), ('id', int)])
@@ -3587,14 +3590,25 @@
         with self.assertRaises(TypeError):
             NamedTuple('Emp', fields=[('name', str), ('id', int)])
 
-    def test_pickle(self):
+    def test_copy_and_pickle(self):
         global Emp  # pickle wants to reference the class by name
-        Emp = NamedTuple('Emp', [('name', str), ('id', int)])
-        jane = Emp('jane', 37)
-        for proto in range(pickle.HIGHEST_PROTOCOL + 1):
-            z = pickle.dumps(jane, proto)
-            jane2 = pickle.loads(z)
-            self.assertEqual(jane2, jane)
+        Emp = NamedTuple('Emp', [('name', str), ('cool', int)])
+        for cls in Emp, CoolEmployee, self.NestedEmployee:
+            with self.subTest(cls=cls):
+                jane = cls('jane', 37)
+                for proto in range(pickle.HIGHEST_PROTOCOL + 1):
+                    z = pickle.dumps(jane, proto)
+                    jane2 = pickle.loads(z)
+                    self.assertEqual(jane2, jane)
+                    self.assertIsInstance(jane2, cls)
+
+                jane2 = copy(jane)
+                self.assertEqual(jane2, jane)
+                self.assertIsInstance(jane2, cls)
+
+                jane2 = deepcopy(jane)
+                self.assertEqual(jane2, jane)
+                self.assertIsInstance(jane2, cls)
 
 
 class TypedDictTests(BaseTestCase):
diff --git a/Lib/typing.py b/Lib/typing.py
index 2c75a76..0e842ff 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -1593,7 +1593,7 @@
                '_fields', '_field_defaults', '_field_types',
                '_make', '_replace', '_asdict', '_source')
 
-_special = ('__module__', '__name__', '__qualname__', '__annotations__')
+_special = ('__module__', '__name__', '__annotations__')
 
 
 class NamedTupleMeta(type):