DEV Community

Super Kai (Kazuya Ito)
Super Kai (Kazuya Ito)

Posted on

Frozenset in Python (2)

Buy Me a Coffee

*Memo:

  • My post explains a frozenset (1).
  • My post explains a frozenset (3).
  • My post explains a set (1).
  • My post explains set and frozenset functions (1).

frozenset() can create a frozenset with or without an iterable as shown below:

*Memo:

  • The 1st argument is iterable(Optional-Default:()-Type:Iterable):
    • Don't use iterable=.
# Empty frozenset
print(frozenset())
print(frozenset(()))
# frozenset()

print(frozenset([0, 1, 2, 3, 4]))                      # list
print(frozenset((0, 1, 2, 3, 4)))                      # tuple
print(frozenset(iter([0, 1, 2, 3, 4])))                # iterator
print(frozenset({0, 1, 2, 3, 4}))                      # set
print(frozenset(frozenset([0, 1, 2, 3, 4])))           # frozenset
print(frozenset(range(5)))                             # range
# frozenset({0, 1, 2, 3, 4})

print(frozenset({'name': 'John', 'age': 36}))          # dict
print(frozenset({'name': 'John', 'age': 36}.keys()))   # dict.keys()
# frozenset({'age', 'name'})

print(frozenset({'name': 'John', 'age': 36}.values())) # dict.values()
# frozenset({'John', 36})

print(frozenset({'name': 'John', 'age': 36}.items()))  # dict.items()
# frozenset({('name', 'John'), ('age', 36)})

print(frozenset('Hello'))                              # str
# frozenset({'o', 'l', 'e', 'H'})

print(frozenset(b'Hello'))                             # bytes
print(frozenset(bytearray(b'Hello')))                  # bytearray
# frozenset({72, 108, 101, 111})
Enter fullscreen mode Exit fullscreen mode

A frozenset comprehension can create a frozenset as shown below:

<1D frozenset>:

sample = frozenset([0, 1, 2, 3, 4, 5, 6, 7])

A = frozenset(x**2 for x in sample)

print(A)
# frozenset({0, 1, 4, 36, 9, 16, 49, 25})
Enter fullscreen mode Exit fullscreen mode

<2D frozenset>:

sample = frozenset([frozenset([0, 1, 2, 3]), frozenset([4, 5, 6, 7])])

A = frozenset(frozenset(y**2 for y in x) for x in sample)

print(A)
# frozenset({frozenset({16, 25, 36, 49}), frozenset({0, 1, 4, 9})})
Enter fullscreen mode Exit fullscreen mode

<3D frozenset>:

sample = frozenset([frozenset([frozenset([0, 1]), frozenset([2, 3])]),
                    frozenset([frozenset([4, 5]), frozenset([6, 7])])])

A = frozenset(frozenset(frozenset(z**2 for z in y) for y in x) for x in sample)

print(A)
# frozenset({frozenset({frozenset({16, 25}), frozenset({49, 36})}),
#            frozenset({frozenset({9, 4}), frozenset({0, 1})})})
Enter fullscreen mode Exit fullscreen mode

A frozenset cannot be read by indexing and slicing and changed by indexing, slicing and a del statement as shown below:

*Memo:

  • A del statement cannot remove zero or more elements from a frozenset by indexing and slicing but can remove one or more variables themselves.
A = frozenset([10, 20, 30, 40, 50, 60])

print(A[1], A[3:5])
# TypeError: 'frozenset' object is not subscriptable
Enter fullscreen mode Exit fullscreen mode
A = frozenset([10, 20, 30, 40, 50, 60])

A[1] = 'X'
A[3:5] = ['Y', 'Z']
# TypeError: 'frozenset' object does not support item assignment
Enter fullscreen mode Exit fullscreen mode
A = frozenset([10, 20, 30, 40, 50, 60])

del A[1], A[3:5]
# TypeError: 'frozenset' object does not support item deletion
Enter fullscreen mode Exit fullscreen mode
A = frozenset([10, 20, 30, 40, 50, 60])

del A

print(A)
# NameError: name 'A' is not defined
Enter fullscreen mode Exit fullscreen mode

If you really want to read or change a frozenset, use list() and frozenset() as shown below:

A = frozenset([10, 20, 30, 40, 50, 60])

A = list(A)

print(A[1], A[3:5])
# 10 [20, 60]

A[1] = 'X'
A[3:5] = ['Y', 'Z']

A = frozenset(A)

print(A)
# frozenset({40, 'Y', 50, 'Z', 'X', 30})
Enter fullscreen mode Exit fullscreen mode
A = frozenset([10, 20, 30, 40, 50, 60])

A = list(A)

del A[1], A[3:5]

A = frozenset(A)

print(A)
# frozenset({40, 50, 20})
Enter fullscreen mode Exit fullscreen mode

Top comments (0)