◐ Shell
clean mode source ↗

Message 257286 - Python tracker

Interesting, short string literals usually are interned, but they are not interned in tuple literal.

>>> namespace = {}
>>> exec('a = ["abc123"]\ndef abc123(): pass', namespace)
>>> namespace['abc123'].__name__ is namespace['a'][0]
True
>>> exec('a = ("abc123",)\ndef abc123(): pass', namespace)
>>> namespace['abc123'].__name__ is namespace['a'][0]
False
>>> namespace['abc123'].__name__ == namespace['a'][0]
True

I think it would be better to change the compiler to always intern short string literals. And patching namedtuple will be not needed.