Shubham S. Naik
Shubham S. Naik

Reputation: 341

Behaviour of Python Sets

s={['list']}

Gives error as below:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
s=set(['list'])

However above works fine. Why?

Upvotes: 0

Views: 44

Answers (2)

Ollin Boer Bohan
Ollin Boer Bohan

Reputation: 2401

The first example is not valid because lists are unhashable.

{['list']} is read as a set containing a single item of type list, but lists cannot be used as set items or keys in python, so you get an error.

The closest analogue would be to use a tuple {('list')}, since tuples are hashable, but it seems more likely that you just want the string, in which case you should write:

s = {'list'}

The second example is valid python syntax.

It calls the set constructor on a list of items to get a set of those items.

Upvotes: 1

Patrick Haugh
Patrick Haugh

Reputation: 61063

Your first example should be giving you a SyntaxError.

{['list']} is a set containing a list which raises an error because lists are not hashable.
set(['list']) is a set built from an iterable that happens to be a list. The equivalent expression using curly braces would be {'list'}, which works fine because strings are hashable.

Upvotes: 2

Related Questions