ふと思った。「pythonのsetって値比較してるの?」
>>> a = ("hoge",) #同値かつ同一でないimmutableの作り方がタプル以外思いつかなかった >>> b = ("hoge",) >>> a is b False >>> id(a) 140412431555272 >>> id(b) 140412430884312 >>> set([a,b]) {('hoge',)}
してるらしい。このsetの中身はどっちのオブジェクトなんだろう。
>>> id(list(set([a,b]))[0]) 140412431555272
先に書いた方? 数を3つにして試してみる。
>>> a = ("hoge",) >>> b = ("hoge",) >>> c = ("hoge",) >>> id(a) 140412431554880 >>> id(b) 140412431555272 >>> id(c) 140412430884312 >>> id(list(set([a,b,c]))[0]) 140412431554880 >>> id(list(set([b,c,a]))[0]) 140412431555272 >>> id(list(set([c,a,b]))[0]) 140412430884312
やっぱり「先に出現したオブジェクトのid」という規則性があるような気もするけど、言語仕様で決まってる訳ではないので、これを利用してプログラムを書こうとか考えない方が良いだろう。
まあ、それ以前に使い道もないけど。