Añadir el número 1 a un conjunto no tiene efecto

No puedo agregar el número entero 1 a un conjunto existente. En una shell interactiva, esto es lo que estoy haciendo:

 >>> 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} 

Esta pregunta fue publicada hace dos meses, pero creo que fue mal entendida. Estoy usando Python 3.2.3.

 >>> 1 == True True 

Creo que su problema es que 1 y True tienen el mismo valor, por lo que 1 está “ya en el conjunto”.

 >>> st {'a', True, 'Vanilla'} >>> 1 in st True 

En operaciones matemáticas, el True es tratado como 1 :

 >>> 5 + True 6 >>> True * 2 2 >>> 3. / (True + True) 1.5 

Aunque True es un bool y 1 es un int:

 >>> type(True)  >>> type(1)  

Porque 1 in st devuelve True, creo que no deberías tener ningún problema con él. Sin embargo, es un resultado muy extraño. Si está interesado en leer más, @Lattyware apunta a PEP 285 que explica en profundidad este problema.

Creo que, aunque no estoy seguro, porque hash(1) == hash(True) y también 1 == True que el set los considera los mismos elementos. No creo que ese sea el caso, ya que 1 is True es False , pero creo que explica por qué no puedes agregarlo.

1 es equivalente a True como 1 == True devuelve true. Como resultado, la inserción de 1 se rechaza porque un conjunto no puede tener duplicados.

Aquí hay algunos enlaces si alguien está interesado en un estudio adicional.

¿Es Pythonic usar bools como ints?

https://stackoverflow.com/a/2764099/1355722