辞書と文字列型

pythonの辞書について.

辞書のkeyにできるものって,str型,unicode型,int型,float型,boolean型がいけるくさい.確認したところによると.

dic = {}
dic["ほげ"] = 1
dic[u"ほげ"] = 2
dic["3"] = 3
dic[3] = 4
dic[False] = 5
print dic
{False: 5, '\xe3\x81\xbb\xe3\x81\x92': 1, '3': 3, 3: 4, u'\u307b\u3052': 2}

おお,全部明確に区別するんだね.

こちらの方がかいていらっしゃいますが,

Pythonではキーの型は、辞書オブジェクト全体で同じ型である必要がありません。
キーはPython内部で「型と値から生成されるオブジェクトハッシュコード」で管理されるようです。
ただし、キーに使えるオブジェクトはイミュータブル(変更不能)オブジェクトでなくてはなりません。(文字列やタプル、数値など)

ほうほう,そういうことなのね.

Javaだと,

ハッシュテーブルにオブジェクトを格納したり、そこから取り出したりするには、キーとして使用するオブジェクトに、hashCode メソッドと equals メソッドが実装されていなければなりません。*1

となっている.まぁそのへんはkeyにするObjectによるんだろ.

あんま知らん.String型くらいしか入れた事無いから...^^^^

javascriptだと,文字列でも数値にキャスト可能なら数値でkeyを取得可能なんだよね.

a = {};
a[3] = 4;
a["3"] = 5;
alert (a[3]); // -> 5

こうみてくると,pythonはどちらかというと型にウルサい言語な気がする.

違いに慣れねば...