Difference between tuples and frozensets in Python

后端 未结 4 1645
面向向阳花
面向向阳花 2020-12-29 00:49

I\'m learning Python 3 using The Quick Python Book, where the author talks about frozensets, stating that since sets are mutable and hence unhashable, thereby becoming unfit

相关标签:
4条回答
  • 2020-12-29 01:26

    One difference that comes to mind is the issue of duplicates. A tuple of (1, 1, 1, 1, 2, 2, 2) would be exactly what you expect, but a frozenset would remove all of those duplicates, leaving you with frozenset([1, 2]).

    0 讨论(0)
  • 2020-12-29 01:28

    tuples are immutable lists, frozensets are immutable sets.

    tuples are indeed an ordered collection of objects, but they can contain duplicates and unhashable objects, and have slice functionality

    frozensets aren't indexed, but you have the functionality of sets - O(1) element lookups, and functionality such as unions and intersections. They also can't contain duplicates, like their mutable counterparts.

    0 讨论(0)
  • 2020-12-29 01:32

    Volatility does mention that frozensets are not indexed. I was looking at the other functionality, so did not immediately realize that standard python slicing is not possible.

    a = frozenset((1, 1, 1, 1, 2, 2, 2))  # results in frozenset([1, 2])
    print a[0] 
    

    will give error:

    TypeError: 'frozenset' object does not support indexing
    

    Obvious from fact that it is not indexed, but though it was worth adding explicitly here

    0 讨论(0)
  • 2020-12-29 01:41

    Somewhat counter intuitive - what about this bon mot:

    sss = frozenset('abc')
    sss |= set('efg')
    

    Will yield:

    frozenset(['a', 'c', 'b', 'e', 'g', 'f'])
    

    Of course, this is equivalent to x = x | y, so not changing the original frozenset, but it doesn't half make a mockery of the term 'immutable' to the code reviewer!

    0 讨论(0)
提交回复
热议问题