# #Day4 - Sets and Frozensets in Python

Sets and Frozen Sets are built-in data types in Python. Both of them are unordered datatypes used to store distinct elements. If you have worked with a different programming language, you might be familiar with Set. However, Frozen Sets are not so common and unique to Python. The biggest advantage of a set and frozen set are the fact that they have a lookup time of O(1).

Frozen Sets are built on top of Sets and as a result, they have many similarities.

A quick summary of their similarities and differences, all of them are discussed.
**Similarities**

- Both contain distinct elements only
- Traversing
- Lookup
- Both can contain Hashable elements only
- Intersection, Union, and Difference

**Differences**

- Creation
- A Frozen set is hashable and mutable while a Set is not hashable and immutable
- A Frozen set can be used as a key in a dictionary

### Creation

To create a set or a frozen set, all we need is iterable. It will only store the distinct elements.

### Treversing a Set/Frozen Set

Both support ** for......in** and can be traversed.

### Lookup

Both sets and frozen sets can only store hashable elements. You can not create a set of lists since a list is not hashable. Since sets and frozen sets only contain hashable elements, each element has a hash value associated with it. As a result, using the **in** operator takes O(1) time. Since they are unordered, both of them do not support indexing

The picture was taken from this article on Medium

### Intersection, Union and Difference in Sets/Frozen Sets

**Intersection**: & (and)**Union**: | (pipe)**Difference**: - (subtraction)

### Mutability

A set is mutable while a frozen set is not. This basically means that a set can be updated after it's created but a frozen set can not. Once a frozen set is created, the elements inside it are frozen.

### Hashability

A frozen set is hashable, i.e it can have a hash value. On the other hand, a set is not hashable. As a result of this, a frozen set can be used as a key for a dictionary but a set can not be used.

### Summary

- Both Frozen Sets and Sets have O(1) lookup time
- Neither of them supports indexing
- Both can be traversed using
**for.....in** - A set can be updated after creation but a frozen set can not be updated
- Only Frozen Sets are hashable and can be used as dictionary keys