Кто-то спросил здесь, почему при размещении 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).
Но это гарантировано? Или просто деталь реализации?