> A set object is an unordered collection of distinct hashable objects. Common uses include membership testing, removing duplicates from a sequence, and computing mathematical operations such as intersection, union, difference, and symmetric difference.
>
> Like other collections, sets support x in set, len(set), and for x in set. Being an unordered collection, sets do not record element position or order of insertion. **Accordingly, sets do not support indexing, slicing, or other sequence-like behavior.**
>
> There are currently two built-in set types, set and frozenset.
> * The **set type is mutable** — the contents can be changed using methods like add() and remove(). Since it is mutable, it has no hash value and cannot be used as either a dictionary key or as an element of another set.
> * The **frozenset type is immutable and hashable** — its contents cannot be altered after it is created; it can therefore be used as a dictionary key or as an element of another set.
> Return a new set or frozenset object whose elements are taken from iterable. The elements of a set must be hashable. To represent sets of sets, the inner sets must be frozenset objects. If iterable is not specified, a new empty set is returned.
>
> Sets can be created by several means:
> * Use a comma-separated list of elements within braces: {'jack', 'sjoerd'}
> * Use a set comprehension: {c for c in 'abracadabra' if c not in 'abc'}
> * Use the type constructor: set(), set('foobar'), set(['a', 'b', 'foo'])