
On Sun, 16 Jan 2022 at 22:55, Steven D'Aprano <steve@pearwood.info> wrote:
def f(): ... return frozenset({1, 2, 3}) ... a = f.__code__.co_consts[1] a frozenset({1, 2, 3}) b = f() assert a == b a is b False
Each time you call the function, you get a distinct frozenset object.
I may just be reiterating your point here (if I am, I'm sorry - I'm not completely sure), but isn't that required by the definition of the frozenset function. You're calling frozenset(), which is defined to "Return a new frozenset object, optionally with elements taken from iterable". The iterable is the (non-frozen) set {1, 2, 3}. The function def f1(): return f{1, 2, 3} (using f{...} as a frozenset literal) does something different - it returns the *same* object, compiled once at function definition time, every time it's called. So frozenset literals would allow us to express something that we can't currently express (at least not without going through some complicated contortions) in Python. I'm not sure it's a particularly *important* thing to be able to do, but whatever ;-) Paul