Why set.discard doesn't throw an error when a set is passed to it in Python?


My question is quite simple.

When I run

someSet = {1,2,3,4}

It gives the error:

Traceback (most recent call last):
  File "File.py", line 2, in <module>
TypeError: unhashable type: 'list'

Just like list, sets are also unhashable and can’t be stored in a set.
So, I expect the following code to generate an error:

someSet = {1,2,3,4}

But to my surprise, it did not generate any error. Why is it so? Does this mean that I am getting an error for list as there something other than it being unhashable which gives rise to the error? If yes, then what is that thing?

>Solution :

There’s a weird special case where if you pass another set to set.remove, set.discard, or x in set, the set is silently converted to a frozenset.

Note, the elem argument to the __contains__(), remove(), and discard() methods may be a set. To support searching for an equivalent frozenset, a temporary one is created from elem.

Leave a Reply Cancel reply