On 2022-01-16 08:27, Steven D'Aprano wrote:
[snip]
dis.dis("frozenset({1, 2, 3})")
1 0 LOAD_NAME 0 (frozenset)
2 BUILD_SET 0
4 LOAD_CONST 0 (frozenset({1, 2, 3}))
6 SET_UPDATE 1
8 CALL_FUNCTION 1
10 RETURN_VALUE
Got that? To create a frozenset of literals, first the compiler creates
a frozenset constant containing what you wanted. Then at runtime, it:
- looks up frozenset in globals and builtins;
- loads the pre-prepared frozenset (which is exactly what we want);
- creates a new set from that frozenset;
- calls the frozenset() function on that set to create a new frozenset
that duplicates the pre-prepared one;
- and finally garbage-collects the temporary set.
[snip]
Not quite as bad as that:
>>> f = frozenset({1, 2, 3})
>>> f is frozenset(f)
True
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/python-ideas@python.org/message/M2N3GNQRCPDYUQK7KGS3T5RI5NE3BBYJ/
Code of Conduct: http://python.org/psf/codeofconduct/