Module re cache các pattern đã compile (mặc định tối đa 512 entries từ Python 3.7, trước đó 100). Cache tự động clear khi đầy. Thường không cần can thiệp thủ công.
Cơ chế Cache
re.compile(pattern)lưu pattern đã compile vào cache internal_cache.- Lần sau dùng cùng pattern string → lấy từ cache (tránh recompile).
- Cache là LRU (Least Recently Used) - entry cũ nhất bị xóa khi đầy.
Xem cache size (Python 3.7+)
import re
print(re._MAXCACHE) # 512 (default)
# print(len(re._cache)) # Internal, không khuyến nghị truy cập trực tiếp
Clear cache thủ công (hiếm khi cần)
# Chỉ dùng cho debugging/testing
re._cache.clear() # Private API - có thể thay đổi giữa các version
Tại sao KHÔNG nên clear cache thủ công?
- Cache tăng hiệu năng đáng kể (tránh recompile).
- Overhead quản lý cache nhỏ hơn lợi ích.
_cachelà private implementation detail - có thể biến mất/thay đổi.- Python tự quản lý LRU eviction hiệu quả.
Best Practice: Tự compile và reuse
# TỐT: Compile một lần, dùng nhiều lần
EMAIL_PATTERN = re.compile(r'\b[\w.+-]+@[\w-]+\.[\w.-]+\b')
def extract_emails(text):
return EMAIL_PATTERN.findall(text)
# KÉM: Compile lại mỗi lần gọi
def extract_emails_bad(text):
return re.findall(r'\b[\w.+-]+@[\w-]+\.[\w.-]+\b', text) # Cache hit nhưng vẫn có overhead lookup
Tóm tắt
- Cache tự động, LRU, size 512 (Python 3.7+).
- Không cần clear thủ công.
- Tự
re.compile()pattern dùng lặp để tận dụng cache rõ ràng. - Tránh dùng pattern động (f-string mới mỗi lần) → bypass cache.