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