Issue #25554: Got rid of circular references in regular expression parsing.
diff --git a/Lib/sre_parse.py b/Lib/sre_parse.py
index 67f84e9..f6a8851 100644
--- a/Lib/sre_parse.py
+++ b/Lib/sre_parse.py
@@ -70,14 +70,14 @@
     def __init__(self):
         self.flags = 0
         self.groupdict = {}
-        self.subpatterns = [None]  # group 0
+        self.groupwidths = [None]  # group 0
         self.lookbehindgroups = None
     @property
     def groups(self):
-        return len(self.subpatterns)
+        return len(self.groupwidths)
     def opengroup(self, name=None):
         gid = self.groups
-        self.subpatterns.append(None)
+        self.groupwidths.append(None)
         if self.groups > MAXGROUPS:
             raise error("too many groups")
         if name is not None:
@@ -88,9 +88,9 @@
             self.groupdict[name] = gid
         return gid
     def closegroup(self, gid, p):
-        self.subpatterns[gid] = p
+        self.groupwidths[gid] = p.getwidth()
     def checkgroup(self, gid):
-        return gid < self.groups and self.subpatterns[gid] is not None
+        return gid < self.groups and self.groupwidths[gid] is not None
 
     def checklookbehindgroup(self, gid, source):
         if self.lookbehindgroups is not None:
@@ -195,7 +195,7 @@
                 lo = lo + 1
                 hi = hi + 1
             elif op is GROUPREF:
-                i, j = self.pattern.subpatterns[av].getwidth()
+                i, j = self.pattern.groupwidths[av]
                 lo = lo + i
                 hi = hi + j
             elif op is GROUPREF_EXISTS:
diff --git a/Misc/NEWS b/Misc/NEWS
index 8d42744..f2ce94a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -54,6 +54,8 @@
 Library
 -------
 
+- Issue #25554: Got rid of circular references in regular expression parsing.
+
 - Issue #25510: fileinput.FileInput.readline() now returns b'' instead of ''
   at the end if the FileInput was opened with binary mode.
   Patch by Ryosuke Ito.