I cannot add the integer number 1
to an existing set. In an interactive shell, this is what I am doing:
>>> st = {'a', True, 'Vanilla'}
>>> st
{'a', True, 'Vanilla'}
>>> st.add(1)
>>> st
{'a', True, 'Vanilla'} # Here's the problem; there's no 1, but anything else works
>>> st.add(2)
>>> st
{'a', True, 'Vanilla', 2}
This question was posted two months ago, but I believe it was misunderstood. I am using Python 3.2.3.
I believe, though I'm not certain, that because
hash(1) == hash(True)
and also1 == True
that they are considered the same elements by theset
. I don't believe that should be the case, as1 is True
isFalse
, but I believe it explains why you can't add it.1
is equivalent toTrue
as1 == True
returns true. As a result the insertion of1
is rejected as a set cannot have duplicates.I believe your problem is that
1
andTrue
are the same value, so 1 is "already in the set".In mathematical operations
True
is itself treated as1
:Though True is a bool and 1 is an int:
Because
1 in st
returns True, I think you shouldn't have any problems with it. It is a very strange result though. If you're interested in further reading, @Lattyware points to PEP 285 which explains this issue in depth.Here are some link if anyone is interested in further study.
Is it Pythonic to use bools as ints?
https://stackoverflow.com/a/2764099/1355722