On Fri, Jan 21, 2022 at 3:52 AM Oscar Benjamin <oscar.j.benjamin@gmail.com> wrote:
 > If this does all come to pass, then:
 >
 > s = {3,8,2}.frozen()
 > will be slightly faster, in some case, than
 > s = frozenset({3,8,2}
 >
 > but the result would be the same.

I really don't understand (having read everything above) why anyone prefers {1,2,3}.frozen() over f{1,2,3}.

Because it doesn't require any change to the language -- it's a feature, not a language change. Every change to the language is s substantial burden to the whole community. Even a "small" one like this.

It was absolutely worth for, e.g. f-strings, because they are a feature that has very broad use. This would have narrow use, and, I think even the OP said is more about potential optimization than a nicer syntax. If others think this syntax is substantially nicer, sure -- but then I'd argue that frozensets are simply not that commonly used -- you yourself realized that while you have an important use case, you aren't using literals that often anyway (at all?).

Python is not a high-performance language -- has it ever had a feature added primirly so it could be optimized? (that is a serious question).

And this does seem like a very small change, but is it?
1) folks, a couple years from now, reading new code might have never heard of a frozenset, and see:

frozenset(something)
 or
{1,5,2}.frozen()

will probably have a pretty good idea what those mean, and if they have no clue, then it's easy to look up.

f{3,1,6}

not so much.

And once we have ONE prefix on a bracket, I"ll bet you folks will suggest more ...

small change
medium churn
tiny benefit

(frankly, it's confusing enough that {a,b,c} makes a set and {} makes a dict, but what can we do? there's only so many brackets :-(

-CHB

--
Christopher Barker, PhD (Chris)

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython