diff --git a/Lib/re.py b/Lib/re.py --- a/Lib/re.py +++ b/Lib/re.py @@ -211,7 +211,7 @@ def compile(pattern, flags=0): "Compile a regular expression pattern, returning a pattern object." - return _compile(pattern, flags) + return _compile_typed_uncached(type(pattern), pattern, flags) def purge(): "Clear the regular expression caches" @@ -262,8 +262,7 @@ def _compile(pattern, flags): return _compile_typed(type(pattern), pattern, flags) -@functools.lru_cache(maxsize=500) -def _compile_typed(text_bytes_type, pattern, flags): +def _compile_typed_uncached(text_bytes_type, pattern, flags): # internal: compile pattern if isinstance(pattern, _pattern_type): if flags: @@ -274,6 +273,8 @@ raise TypeError("first argument must be string or compiled pattern") return sre_compile.compile(pattern, flags) +_compile_typed = functools.lru_cache(maxsize=500)(_compile_typed_uncached) + @functools.lru_cache(maxsize=500) def _compile_repl(repl, pattern): # internal: compile replacement pattern