Factor out shared variables.
diff --git a/Lib/functools.py b/Lib/functools.py
index 1e7795f..af0864f 100644
--- a/Lib/functools.py
+++ b/Lib/functools.py
@@ -167,18 +167,20 @@
     # The internals of the lru_cache are encapsulated for thread safety and
     # to allow the implementation to change (including a possible C version).
 
+    # Constants shared by all lru cache instances:
+    kwd_mark = (object(),)   # separate positional and keyword args
+    sentinel = object()      # unique object used to signal cache misses
+    _len = len               # localize the global len() function
+    PREV, NEXT, KEY, RESULT = 0, 1, 2, 3   # names for the link fields
+
     def decorating_function(user_function):
 
         cache = {}
         hits = misses = 0
-        kwd_mark = (object(),)   # separate positional and keyword args
         cache_get = cache.get    # bound method to lookup a key or return None
-        sentinel = object()      # unique object used with cache_get
-        _len = len               # localize the global len() function
         lock = Lock()            # because linkedlist updates aren't threadsafe
         root = []                # root of the circular doubly linked list
         root[:] = [root, root, None, None]     # initialize by pointing to self
-        PREV, NEXT, KEY, RESULT = 0, 1, 2, 3   # names for the link fields
 
         def make_key(args, kwds, typed, tuple=tuple, sorted=sorted, type=type):
             # build a cache key from positional and keyword args