Message257286
| Author |
serhiy.storchaka |
| Recipients |
benjamin.peterson, brett.cannon, georg.brandl, ncoghlan, rhettinger, serhiy.storchaka, yselivanov |
| Date |
2016年01月01日.12:23:49 |
| SpamBayes Score |
-1.0 |
| Marked as misclassified |
Yes |
| Message-id |
<1451651029.64.0.0931504424344.issue25981@psf.upfronthosting.co.za> |
| In-reply-to |
| Content |
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. |
|