Use frozenset as a pair in python

后端 未结 4 603
轮回少年
轮回少年 2021-02-06 06:37

I would like to make a pair of two elements. I don\'t care about the order of the elements, so I use frozenset.

I can think of the following two methods t

4条回答
  •  谎友^
    谎友^ (楼主)
    2021-02-06 07:14

    If you have a lot of those pair things, using frozenset() is NOT a good idea. Use tuples instead.

    >>> import sys
    >>> fs1 = frozenset([42, 666])
    >>> fs2 = frozenset([666, 42])
    >>> fs1 == fs2
    True
    >>> t1 = tuple(sorted([42, 666]))
    >>> t2 = tuple(sorted([666, 42]))
    >>> t1 == t2
    True
    >>> sys.getsizeof(fs1)
    116
    >>> sys.getsizeof(t1)
    36
    >>>
    

    Update Bonus: sorted tuples have a predictable iteration sequence:

    >>> for thing in fs1, fs2, t1, t2: print [x for x in thing]
    ...
    [42, 666]
    [666, 42]
    [42, 666]
    [42, 666]
    >>>
    

    Update 2 ... and their repr() is the same:

    >>> repr(fs1)
    'frozenset([42, 666])'
    >>> repr(fs2)
    'frozenset([666, 42])' # possible source of confusion
    >>> repr(t1)
    '(42, 666)'
    >>> repr(t2)
    '(42, 666)'
    >>>
    

提交回复
热议问题