Кто-то спросил здесь, почему при размещении 1 и True в set поддерживается только 1.
Это, конечно, потому что 1==True. Но в каких случаях 1 сохраняется и в каких случаях сохраняется True?
Посмотрим:
передав list, чтобы построить set вместо использования обозначения set:
>>> set([True,1])
{True}
>>> set([1,True])
{1}
кажется логичным: set выполняет итерацию во внутреннем списке и не добавляет второй элемент, потому что он равен первому элементу (обратите внимание, что set([True,1]) не может дать 1, потому что set не может знать, что внутри списка. Это может быть даже не list, но повторяемый)
Теперь с использованием обозначения set:
>>> {True,1}
{1}
>>> {1,True}
{True}
Кажется, что в этом случае список элементов обрабатывается в обратном порядке (тестируется на Python 2.7 и Python 3.4).
Но это гарантировано? Или просто деталь реализации?