Pythonのinvalid expression

前に、ruby-talk:217061で、Pythonの場合、以下の正規表現がエラーになることを書いた。

import re
s = ("a"*300)+"b"
re.search(r'^(a*)*$', s)   # invalid expression

木村さんからエラーになる条件を教えてもらったので、自分でも少し調べてみた。
まず、a*ではなくa+にすると、何故かエラーにならない。
従って以下の場合、指数関数的組合せ爆発が起こってしまう。

s = ("a"*300)+"b"
re.search(r'^(a+)*$', s)   # very long time

ということで、最初のエラーは組合せ爆発を避けるためのものではないのではないか、と思った。