セットは、dictと同じハッシュ関数を使用して要素を追加します。確かに、それらは値要素なしでただ口述されています。
このビデオはあなたがそれをよりよく理解するのを助けるかもしれません。
整数を使用する場合、セットは(「人間の」ソートされた意味で)順序付けられます。
>>> s=set()
>>> for e in range(10):
... s.add(e)
... print s
...
set([0])
set([0, 1])
set([0, 1, 2])
set([0, 1, 2, 3])
set([0, 1, 2, 3, 4])
set([0, 1, 2, 3, 4, 5])
set([0, 1, 2, 3, 4, 5, 6])
set([0, 1, 2, 3, 4, 5, 6, 7])
set([0, 1, 2, 3, 4, 5, 6, 7, 8])
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
ただし、タプルを使用する場合、人間の目には「順序付け」されていません。
>>> s=set()
>>> for t in ((i,i*i) for i in range(10)):
... s.add(t)
... print s
...
set([(0, 0)])
set([(0, 0), (1, 1)])
set([(0, 0), (1, 1), (2, 4)])
set([(3, 9), (0, 0), (1, 1), (2, 4)])
set([(3, 9), (0, 0), (1, 1), (4, 16), (2, 4)])
set([(0, 0), (4, 16), (5, 25), (3, 9), (2, 4), (1, 1)])
set([(6, 36), (0, 0), (4, 16), (5, 25), (3, 9), (2, 4), (1, 1)])
set([(6, 36), (0, 0), (7, 49), (4, 16), (5, 25), (3, 9), (2, 4), (1, 1)])
set([(6, 36), (0, 0), (7, 49), (4, 16), (5, 25), (3, 9), (2, 4), (1, 1), (8, 64)])
set([(6, 36), (0, 0), (7, 49), (4, 16), (5, 25), (3, 9), (9, 81), (2, 4), (1, 1), (8, 64)])
次に、インタプリタで次の2行を試してください。
>>> dict.fromkeys(range(10),None)
{0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None}
>>> dict.fromkeys(((i,i*i) for i in range(10)),None)
{(6, 36): None, (0, 0): None, (7, 49): None, (4, 16): None, (5, 25): None, (3, 9): None, (9, 81): None, (2, 4): None, (1, 1): None, (8, 64): None}
生成されたdictは、設定された例と同じ「順序」であることがわかります。
dictとintキーのみを使用したセットは「順序付け」できますが、実用的な観点からは、dictとsetには順序がありません。
リンクされたビデオを見ると、その理由がわかります。