Is nan in (nan,) correct?

sohcahtoa82 at gmail.com sohcahtoa82 at gmail.com
Thu Mar 5 18:11:45 EST 2015


On Thursday, March 5, 2015 at 2:27:12 PM UTC-8, rand... at fastmail.us wrote:
> It's been brought up on Stack Overflow that the "in" operator (on
> tuples, and by my testing on dict and list, as well as dict lookup) uses
> object identity as a shortcut, and returns true immediately if the
> object being tested *is* an element of the container. However, the
> contains operation does not specify whether object identity or equality
> is to be used. In effect, the built-in container types use a hybrid
> test: "a is b or a == b".
> 
> My question is, is this a *correct* implementation of the operator, or
> are objects "supposed to" use a basis of equality for these tests?

I would argue that if `a is b` then it is obvious that `a == b`, so if all you care about is whether or not `a == b`, then it shouldn't matter if `a is b` is checked first.  It could greatly speed up comparisons for objects that are expensive to compare.

I would also argue that the "in" operator *SHOULD* be using equality of value.  Otherwise, if it only used equality of identity, testing if user input is valid by seeing if it is "in" a list of valid inputs wouldn't work.  Testing identity in this case would *never* be true unless you were dealing with a select number of integers.

>>> i = input()
5
>>> i is 5
True
>>> i = intput()
999999
>>> i is 999999
False
>>> i in [1, 2, 3, 999999]
True



More information about the Python-list mailing list