2

My question is quite simple.

When I run

someSet = {1,2,3,4}
someSet.discard([5])

It gives the error:

Traceback (most recent call last):
  File "File.py", line 2, in <module>
    someSet.discard([5])
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}
someSet.discard({5})

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?

user12137152
  • 732
  • 1
  • 5
  • 14

1 Answers1

3

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.

user2357112
  • 260,549
  • 28
  • 431
  • 505
  • Thanks, it's my mistake that I didn't tried to search in the docs for this and I am sorry for this. I will accept the answer when the 6 min limit is over. – user12137152 Jan 13 '23 at 05:10