Why operations between dict views return a set and not a frozenset?
Marco Sulla
Marco.Sulla.Python at gmail.com
Sun Jan 16 09:32:20 EST 2022
Thank you a lot for letting me understand :)
On Tue, 11 Jan 2022 at 22:09, Peter J. Holzer <hjp-python at hjp.at> wrote:
> On 2022-01-11 19:49:20 +0100, Marco Sulla wrote:
> > I think this is what you mean:
> >
> > >>> dis.dis("for _ in {1, 2}: pass")
> > 1 0 SETUP_LOOP 12 (to 14)
> > 2 LOAD_CONST 3 (frozenset({1, 2}))
> > 4 GET_ITER
> > >> 6 FOR_ITER 4 (to 12)
> > 8 STORE_NAME 0 (_)
> > 10 JUMP_ABSOLUTE 6
> > >> 12 POP_BLOCK
> > >> 14 LOAD_CONST 2 (None)
> > 16 RETURN_VALUE
> > >>> a = {1, 2}
> > >>> dis.dis("for _ in a: pass")
> > 1 0 SETUP_LOOP 12 (to 14)
> > 2 LOAD_NAME 0 (a)
> > 4 GET_ITER
> > >> 6 FOR_ITER 4 (to 12)
> > 8 STORE_NAME 1 (_)
> > 10 JUMP_ABSOLUTE 6
> > >> 12 POP_BLOCK
> > >> 14 LOAD_CONST 0 (None)
> > 16 RETURN_VALUE
>
> I think you have omitted the part that Chris was hinting at.
>
> >>> dis.dis("a = {1, 2};\nfor _ in a: pass")
> 1 0 LOAD_CONST 0 (1)
> 2 LOAD_CONST 1 (2)
> 4 BUILD_SET 2
> 6 STORE_NAME 0 (a)
>
> 2 8 LOAD_NAME 0 (a)
> 10 GET_ITER
> >> 12 FOR_ITER 4 (to 18)
> 14 STORE_NAME 1 (_)
> 16 JUMP_ABSOLUTE 12
> >> 18 LOAD_CONST 2 (None)
> 20 RETURN_VALUE
>
> Now compare
>
> 2 LOAD_CONST 3 (frozenset({1, 2}))
>
> with
>
> 1 0 LOAD_CONST 0 (1)
> 2 LOAD_CONST 1 (2)
> 4 BUILD_SET 2
>
> and you see the difference between using a frozenset as a constant and
> building a set at runtime.
>
> hp
>
> --
> _ | Peter J. Holzer | Story must make more sense than reality.
> |_|_) | |
> | | | hjp at hjp.at | -- Charles Stross, "Creative writing
> __/ | http://www.hjp.at/ | challenge!"
> --
> https://mail.python.org/mailman/listinfo/python-list
>
More information about the Python-list
mailing list