
March 23, 2010
10 p.m.
On Wed, 24 Mar 2010 05:04:37 am Mark Dickinson wrote:
On Tue, Mar 23, 2010 at 5:48 PM, Adam Olsen <rhamph@gmail.com> wrote:
a = Decimal('nan') a != a
They don't follow the behaviour required for being hashable.
What's this required behaviour? The only rule I'm aware of is that if a == b then hash(a) == hash(b). That's not violated here.
Note that containment tests check identity before equality, so there's no problem with putting (float) nans in sets or dicts:
x = float('nan') s = {x} x in s True
As usual though, NANs are unintuitive:
d = {float('nan'): 1} d[float('nan')] = 2 d {nan: 1, nan: 2}
I suspect that's a feature, not a bug. -- Steven D'Aprano