diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index c0343ef..e0cffe1 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -16,10 +16,8 @@
 import types
 import unittest
 import warnings
-from collections import OrderedDict
 from operator import neg
-from test.support import (TESTFN, unlink,  run_unittest, check_warnings,
-                          cpython_only)
+from test.support import TESTFN, unlink,  run_unittest, check_warnings
 from test.support.script_helper import assert_python_ok
 try:
     import pty, signal
@@ -1780,194 +1778,6 @@
             A.__doc__ = doc
             self.assertEqual(A.__doc__, doc)
 
-    def test_type_definition_order_nonempty(self):
-        class Spam:
-            b = 1
-            c = 3
-            a = 2
-            d = 4
-            eggs = 2
-            e = 5
-            b = 42
-
-        self.assertEqual(Spam.__definition_order__,
-                         ('__module__', '__qualname__',
-                          'b', 'c', 'a', 'd', 'eggs', 'e'))
-
-    def test_type_definition_order_empty(self):
-        class Empty:
-            pass
-
-        self.assertEqual(Empty.__definition_order__,
-                         ('__module__', '__qualname__'))
-
-    def test_type_definition_order_on_instance(self):
-        class Spam:
-            a = 2
-            b = 1
-            c = 3
-        with self.assertRaises(AttributeError):
-            Spam().__definition_order__
-
-    def test_type_definition_order_set_to_None(self):
-        class Spam:
-            a = 2
-            b = 1
-            c = 3
-        Spam.__definition_order__ = None
-        self.assertEqual(Spam.__definition_order__, None)
-
-    def test_type_definition_order_set_to_tuple(self):
-        class Spam:
-            a = 2
-            b = 1
-            c = 3
-        Spam.__definition_order__ = ('x', 'y', 'z')
-        self.assertEqual(Spam.__definition_order__, ('x', 'y', 'z'))
-
-    def test_type_definition_order_deleted(self):
-        class Spam:
-            a = 2
-            b = 1
-            c = 3
-        del Spam.__definition_order__
-        self.assertEqual(Spam.__definition_order__, None)
-
-    def test_type_definition_order_set_to_bad_type(self):
-        class Spam:
-            a = 2
-            b = 1
-            c = 3
-        Spam.__definition_order__ = 42
-        self.assertEqual(Spam.__definition_order__, 42)
-
-    def test_type_definition_order_builtins(self):
-        self.assertEqual(object.__definition_order__, None)
-        self.assertEqual(type.__definition_order__, None)
-        self.assertEqual(dict.__definition_order__, None)
-        self.assertEqual(type(None).__definition_order__, None)
-
-    def test_type_definition_order_dunder_names_included(self):
-        class Dunder:
-            VAR = 3
-            def __init__(self):
-                pass
-
-        self.assertEqual(Dunder.__definition_order__,
-                         ('__module__', '__qualname__',
-                          'VAR', '__init__'))
-
-    def test_type_definition_order_only_dunder_names(self):
-        class DunderOnly:
-            __xyz__ = None
-            def __init__(self):
-                pass
-
-        self.assertEqual(DunderOnly.__definition_order__,
-                         ('__module__', '__qualname__',
-                          '__xyz__', '__init__'))
-
-    def test_type_definition_order_underscore_names(self):
-        class HalfDunder:
-            __whether_to_be = True
-            or_not_to_be__ = False
-
-        self.assertEqual(HalfDunder.__definition_order__,
-                         ('__module__', '__qualname__',
-                          '_HalfDunder__whether_to_be', 'or_not_to_be__'))
-
-    def test_type_definition_order_with_slots(self):
-        class Slots:
-            __slots__ = ('x', 'y')
-            a = 1
-            b = 2
-
-        self.assertEqual(Slots.__definition_order__,
-                         ('__module__', '__qualname__',
-                          '__slots__', 'a', 'b'))
-
-    def test_type_definition_order_overwritten_None(self):
-        class OverwrittenNone:
-            __definition_order__ = None
-            a = 1
-            b = 2
-            c = 3
-
-        self.assertEqual(OverwrittenNone.__definition_order__, None)
-
-    def test_type_definition_order_overwritten_tuple(self):
-        class OverwrittenTuple:
-            __definition_order__ = ('x', 'y', 'z')
-            a = 1
-            b = 2
-            c = 3
-
-        self.assertEqual(OverwrittenTuple.__definition_order__,
-                         ('x', 'y', 'z'))
-
-    def test_type_definition_order_overwritten_bad_item(self):
-        with self.assertRaises(TypeError):
-            class PoorlyOverwritten:
-                __definition_order__ = ('a', 2, 'c')
-                a = 1
-                b = 2
-                c = 3
-
-    def test_type_definition_order_overwritten_bad_type(self):
-        with self.assertRaises(TypeError):
-            class PoorlyOverwritten:
-                __definition_order__ = ['a', 2, 'c']
-                a = 1
-                b = 2
-                c = 3
-
-    def test_type_definition_order_metaclass(self):
-        class Meta(type):
-            SPAM = 42
-
-            def __init__(self, *args, **kwargs):
-                super().__init__(*args, **kwargs)
-
-        self.assertEqual(Meta.__definition_order__,
-                         ('__module__', '__qualname__',
-                          'SPAM', '__init__'))
-
-    def test_type_definition_order_OrderedDict(self):
-        class Meta(type):
-            def __prepare__(self, *args, **kwargs):
-                return OrderedDict()
-
-        class WithODict(metaclass=Meta):
-            x='y'
-
-        self.assertEqual(WithODict.__definition_order__,
-                         ('__module__', '__qualname__', 'x'))
-
-        class Meta(type):
-            def __prepare__(self, *args, **kwargs):
-                class ODictSub(OrderedDict):
-                    pass
-                return ODictSub()
-
-        class WithODictSub(metaclass=Meta):
-            x='y'
-
-        self.assertEqual(WithODictSub.__definition_order__,
-                         ('__module__', '__qualname__', 'x'))
-
-    @cpython_only
-    def test_type_definition_order_cpython(self):
-        # some implementations will have an ordered-by-default dict.
-
-        class Meta(type):
-            def __prepare__(self, *args, **kwargs):
-                return {}
-
-        class NotOrdered(metaclass=Meta):
-            x='y'
-
-        self.assertEqual(NotOrdered.__definition_order__, None)
-
     def test_bad_args(self):
         with self.assertRaises(TypeError):
             type()
diff --git a/Lib/test/test_metaclass.py b/Lib/test/test_metaclass.py
index 4db792e..e6fe20a 100644
--- a/Lib/test/test_metaclass.py
+++ b/Lib/test/test_metaclass.py
@@ -180,7 +180,7 @@
     meta: C ()
     ns: [('__module__', 'test.test_metaclass'), ('__qualname__', 'C'), ('a', 42), ('b', 24)]
     kw: []
-    >>> type(C) is types._DefaultClassNamespaceType
+    >>> type(C) is dict
     True
     >>> print(sorted(C.items()))
     [('__module__', 'test.test_metaclass'), ('__qualname__', 'C'), ('a', 42), ('b', 24)]
@@ -211,11 +211,8 @@
 
 The default metaclass must define a __prepare__() method.
 
-    >>> ns = type.__prepare__()
-    >>> type(ns) is types._DefaultClassNamespaceType
-    True
-    >>> list(ns) == []
-    True
+    >>> type.__prepare__()
+    {}
     >>>
 
 Make sure it works with subclassing.
@@ -251,9 +248,7 @@
 
 """
 
-from collections import OrderedDict
 import sys
-import types
 
 # Trace function introduces __locals__ which causes various tests to fail.
 if hasattr(sys, 'gettrace') and sys.gettrace():
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
index 229fff4..17a82c2 100644
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -427,7 +427,6 @@
         expected_html = expected_html_pattern % (
                         (mod_url, mod_file, doc_loc) +
                         expected_html_data_docstrings)
-        self.maxDiff = None
         self.assertEqual(result, expected_html)
 
     @unittest.skipIf(sys.flags.optimize >= 2,
@@ -474,18 +473,13 @@
     def test_non_str_name(self):
         # issue14638
         # Treat illegal (non-str) name like no name
-        # Definition order is set to None so it looks the same in both
-        # cases.
         class A:
-            __definition_order__ = None
             __name__ = 42
         class B:
             pass
         adoc = pydoc.render_doc(A())
         bdoc = pydoc.render_doc(B())
-        self.maxDiff = None
-        expected = adoc.replace("A", "B")
-        self.assertEqual(bdoc, expected)
+        self.assertEqual(adoc.replace("A", "B"), bdoc)
 
     def test_not_here(self):
         missing_module = "test.i_am_not_here"
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index aa89506..a6cd95e 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -1085,7 +1085,7 @@
         check((1,2,3), vsize('') + 3*self.P)
         # type
         # static type: PyTypeObject
-        fmt = 'P2n15Pl4Pn9Pn11PIPP'
+        fmt = 'P2n15Pl4Pn9Pn11PIP'
         if hasattr(sys, 'getcounts'):
             fmt += '3n2P'
         s = vsize(fmt)
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
index e5e110f..a202196 100644
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -825,28 +825,6 @@
         self.assertEqual(C.y, 1)
         self.assertEqual(C.z, 2)
 
-    def test_new_class_deforder(self):
-        C = types.new_class("C")
-        self.assertEqual(C.__definition_order__, tuple())
-
-        Meta = self.Meta
-        def func(ns):
-            ns["x"] = 0
-        D = types.new_class("D", (), {"metaclass": Meta, "z": 2}, func)
-        self.assertEqual(D.__definition_order__, ('y', 'z', 'x'))
-
-        def func(ns):
-            ns["__definition_order__"] = None
-            ns["x"] = 0
-        D = types.new_class("D", (), {"metaclass": Meta, "z": 2}, func)
-        self.assertEqual(D.__definition_order__, None)
-
-        def func(ns):
-            ns["__definition_order__"] = ('a', 'b', 'c')
-            ns["x"] = 0
-        D = types.new_class("D", (), {"metaclass": Meta, "z": 2}, func)
-        self.assertEqual(D.__definition_order__, ('a', 'b', 'c'))
-
     # Many of the following tests are derived from test_descr.py
     def test_prepare_class(self):
         # Basic test of metaclass derivation
diff --git a/Lib/types.py b/Lib/types.py
index cc093cb..48891cd 100644
--- a/Lib/types.py
+++ b/Lib/types.py
@@ -25,11 +25,8 @@
 _c.close()  # Prevent ResourceWarning
 
 class _C:
-    _nsType = type(locals())
     def _m(self): pass
 MethodType = type(_C()._m)
-# In CPython, this should end up as OrderedDict.
-_DefaultClassNamespaceType = _C._nsType
 
 BuiltinFunctionType = type(len)
 BuiltinMethodType = type([].append)     # Same as BuiltinFunctionType
@@ -88,7 +85,7 @@
     if hasattr(meta, '__prepare__'):
         ns = meta.__prepare__(name, bases, **kwds)
     else:
-        ns = _DefaultClassNamespaceType()
+        ns = {}
     return meta, ns, kwds
 
 def _calculate_meta(meta, bases):
diff --git a/Lib/typing.py b/Lib/typing.py
index 5f451b0..5573a1f 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -1301,7 +1301,6 @@
                     if (not attr.startswith('_abc_') and
                             attr != '__abstractmethods__' and
                             attr != '_is_protocol' and
-                            attr != '__definition_order__' and
                             attr != '__dict__' and
                             attr != '__args__' and
                             attr != '__slots__' and
