Hey there! So today we are here to discuss **the Python frozenset() method.**

So before we get into the method, let us know what a **frozenset** is.

## What is a frozenset?

A `frozenset`

is an unordered, un-indexed, and immutable collection of elements. It provides all the functionalities that a set offers in Python, the only difference being the fact that a frozenset is **immutable**, i.e. can’t be changed after it is created.

Hence in simple words, frozen sets are immutable sets.

## The Python frozenset() Method

The Python `frozenset()`

method returns a new frozenset object whose elements are taken from the passed `iterable`

. If `iterable`

is not specified, a new empty set is returned.

**Note:** The elements must be hashable.

```
fz = frozenset([iterable])
```

When nothing is specified, the `frozenset()`

method returns an empty frozenset object to `fz`

.

To get a better understanding of how the method works, let us look at an example.

```
# List Initialisation
list1 = [0, 1, 2, 3, 4, 5, 6]
fz = frozenset(list1)
print(fz)
fz = frozenset() # empty frozenset
print(fz)
print("Type of fz: ", type(fz))
```

**Output:**

```
frozenset({0, 1, 2, 3, 4, 5, 6})
frozenset()
Type of fz: <class 'frozenset'>
```

Here, firstly we have initialized a list(`list1`

) and then passed it as `iterable`

to the `frozenset()`

method. In return we get a frozenset object(**fz**) with elements from the list. When nothing is passed, **fz **is now an empty frozenset object.

## Frozenset Initialization

In the below-given example, we have initialized a frozenset using the Python `frozenset()`

method by passing different iterables like list, tuple, set, and dictionary.

```
# Initialisation
list1 = [1, 2, 3, 4, 5]
fz = frozenset(list1) # from list object
print(fz)
fz = frozenset([1, 2, 3, 4, 5]) # from list
print(fz)
fz = frozenset({5: 'a', 4: 'B', 3: 'C', 2: 'D', 1: 'E', 0: '0'})# from dict
print(fz)
fz = frozenset({'Python', 'Java', 'C', 'C++', 'Kotlin', 'R'})# from set
print(fz)
fz = frozenset((17, 55, 26, 90, 75, 34)) # from tuple
print(fz)
```

**Output:**

```
frozenset({1, 2, 3, 4, 5})
frozenset({1, 2, 3, 4, 5})
frozenset({0, 1, 2, 3, 4, 5})
frozenset({'Java', 'Kotlin', 'Python', 'C', 'R', 'C++'})
frozenset({34, 90, 75, 17, 55, 26})
```

For each case, we get a frozenset object with the corresponding iterable elements in it. But carefully note, that in the case of a dictionary only the keys are being considered.

## Operations on a Python frozenset

We can get names of all the methods related to a frozenset object using the dir() method.

```
fo = frozenset([1, 2, 3, 4, 5])
print(dir(fo))
```

**Output:**

```
['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'copy', 'difference', 'intersection', 'isdisjoint', 'issubset', 'issuperset', 'symmetric_difference', 'union']
```

Notice from the above output, that various functions like add(), remove(), update(), pop() etc.(used to change/update elements, available for sets) are missing. Again this is due to the fact that a frozen set is immutable.

So now let us look at the available methods for frozen sets, using which we can perform various operations.

```
fs = frozenset([1, 12, 23, 45, 67, 89, 100])
print("Given Frozenset =", fs)
fs_len = len(fs)
print("Length of Frozenset =", fs_len)
print("23 in fs? ", 23 in fs)
print("23 not in fs? ", 23 not in fs)
print("Sets are disjoint? ", fs.isdisjoint(frozenset([10, 5])))
print("Set is Subset? ", fs.issubset(set([1, 2, 3, 4, 12, 23, 45, 67, 89, 100])))
print("fs is superset? ", fs.issuperset(frozenset({1, 100})))
print("Union of sets: ", fs.union(frozenset([-1, -12])))
print("Intersection: ", fs.intersection(set([1, 10, 100])))
print("Difference: ", fs.difference(frozenset([1, 10, 100])))
print("Symmetric difference: ", fs.symmetric_difference(frozenset([1, 10, 100])))
fs_copy = fs.copy()
print("Copy of fs: ", fs_copy)
```

**Output:**

```
Given Frozenset = frozenset({1, 67, 100, 12, 45, 23, 89})
Length of Frozenset = 7
23 in fs? True
23 not in fs? False
Sets are disjoint? True
Set is Subset? True
fs is superset? True
Union of sets: frozenset({1, 67, 100, 12, 45, -12, 23, 89, -1})
Intersection: frozenset({1, 100})
Difference: frozenset({67, 12, 45, 23, 89})
Symmetric difference: frozenset({67, 10, 12, 45, 23, 89})
Copy of fs: frozenset({1, 67, 100, 12, 45, 23, 89})
```

Here,

**len(s)**: Returns the length of the frozenset s,**x in s**: Checks whether x is present in frozenset s or not,**x not in s**: Returns True if x is not an element of frozenset s. Or else returns False,**isdisjoint(other)**: Returns True if the set has no elements in common with`other`

. Sets are disjoint if and only if their intersection is the empty set.**issubset(other)**: Checks whether other contains elements of the frozenset or not,**issuperset(other)**: Checks whether the frozenset contains elements of`other`

or not,**union(*others)**: Returns a frozenset containing the union of the provided other sets,**intersection(*others)**: Returns a frozenset, with elements common to fs and all others passed,**difference(*others)**: Returns a new frozenset with elements in the frozenset(fs) that are not in the others,**symmetric_difference(other)**: Returns a new frozenset with elements in either fs or other but not both.

## Summing Up

That’s it for today. Hope you had a clear understanding of the Python `frozenset()`

method.

For more info, we recommend going through the links provided in the references section.

For any further questions, feel free to comment below.

## References

- Python frozenset – Documentation,
- Difference between tuples and frozensets in Python – Stack Overflow Question,
- Set and frozenset difference in implementation – Stack Overflow Question.