[Tim] > Can you flesh this out for what stumbled into being my running example? That is, how could a regexp pattern object be part of a cycle?
Found the problem that we saw regarding a cycle involving the type. That comes from this comment: https://github.com/python/cpython/pull/23811#issuecomment-747788766 On Thu, 27 May 2021 at 20:24, Pablo Galindo Salgado <pablog...@gmail.com> wrote: > > Can you flesh this out for what stumbled into being my running > example? That is, how could a regexp pattern object be part of a > cycle? > > Let me try to remember when we saw this problem in the past, but > on first sigh, it seems that indeed that cannot happen in the regular case. > > > And, in general, I can't add attributes to p, or change their bindings: > > That's after the changes to add a new Py_TPFLAGS_IMMUTABLETYPE flag, > which predates the > creation of the issue we are discussing. But in general, new heap types > are not immutable by > default (check https://bugs.python.org/issue43908). > For instance, in python3.8: > > >>> array.array.x = 4 > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: can't set attributes of built-in/extension type 'array.array' > > but in python 3.10.0a7 (before Py_TPFLAGS_IMMUTABLETYPE): > > Python 3.10.0a7 (tags/v3.10.0a7:53e55290cf, May 27 2021, 20:20:26) [Clang > 12.0.0 (clang-1200.0.32.29)] on darwin > Type "help", "copyright", "credits" or "license" for more information. > >>> import array > >>> instance = array.array("f") > >>> type = array.array > >>> type.instance = instance > > On Thu, 27 May 2021 at 20:15, Tim Peters <tim.pet...@gmail.com> wrote: > >> [Tim] >> >> And if a type pointer is the only thing being visited, then there's no >> point >> >> unless the object can itself be reachable from the type object. >> >> {Pablo] >> > But that could happen easily for heap types as they are mutable by >> > default. For instance, you set the instance in a global: >> > >> > type -> module -> globals -> instance -> type >> >> Sorry, but this is apparently a rat's nest and that's too sketchy for me >> ;-) >> >> Can you flesh this out for what stumbled into being my running >> example? That is, how could a regexp pattern object be part of a >> cycle? >> >> >>> import re >> >>> p = re.compile("ab*c") >> >>> type(p) >> <class 're.Pattern'> >> >>> type(p).__module__ >> 're' >> >>> type(type(p).__module__) >> <class 'str'> >> >> That is, its __module__ attribute is a string, not a module object. >> >> And, in general, I can't add attributes to p, or change their bindings: >> >> >>> p.flags >> 32 >> >>> p.flags = re >> Traceback (most recent call last): >> File "<stdin>", line 1, in <module> >> AttributeError: readonly attribute >> >>> p.newattr = re >> Traceback (most recent call last): >> File "<stdin>", line 1, in <module> >> AttributeError: 're.Pattern' object has no attribute 'newattr' >> >> I just don't see a way to trick it into being part of a cycle. >> >> Not denying that safe is better than sorry, though. >> >
_______________________________________________ python-committers mailing list -- python-committers@python.org To unsubscribe send an email to python-committers-le...@python.org https://mail.python.org/mailman3/lists/python-committers.python.org/ Message archived at https://mail.python.org/archives/list/python-committers@python.org/message/4JNQCNUAHT7IJSOM3ILR4XFA3R7H5Z2T/ Code of Conduct: https://www.python.org/psf/codeofconduct/