Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python set interpetation of 1 and True

Tags:

python

set

In IPython 3 interactive shell:

In [53]: set2 = {1, 2, True, "hello"}

In [54]: len(set2)
Out[54]: 3

In [55]: set2
Out[55]: {'hello', True, 2}

Is that because 1 and True get the same interpetation so given that set eliminates duplicates, only one of them (True) gets to stay? How can we keep both?

like image 586
pkaramol Avatar asked Jun 15 '15 17:06

pkaramol


1 Answers

A set is a collection of hashables. Even though the statement 1 is True is False, the statement 1 == True is True. Because of that, they have the same hash value and cannot exist separately in a set, and you cannot keep them both in a set

EDIT To make it explicit, as jme pointed out, it is because BOTH things are true - they are equal (per __eq__) AND they have the same hash value (per __hash__).

In a perfect world, equal objects would also have the same hash value, and thankfully this is true for built-in types.

like image 62
mehtunguh Avatar answered Oct 06 '22 19:10

mehtunguh