[Python-Dev] == on object tests identity in 3.x (original) (raw)
[Python-Dev] == on object tests identity in 3.x - list delegation to members?
Nick Coghlan ncoghlan at gmail.com
Sun Jul 13 20:11:58 CEST 2014
- Previous message: [Python-Dev] == on object tests identity in 3.x - list delegation to members?
- Next message: [Python-Dev] == on object tests identity in 3.x - list delegation to members?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 13 July 2014 11:34, Chris Angelico <rosuav at gmail.com> wrote:
On Mon, Jul 14, 2014 at 2:23 AM, Steven D'Aprano <steve at pearwood.info> wrote:
We will see later that that happens. Further, when comparing float NaNs of the same identity, the list implementation forgot to special-case NaNs. Which would be a bug, IMHO.
"Forgot"? I don't think the behaviour of list comparisons is an accident. Well, "forgot" is on the basis that the identity check is intended to be a mere optimization. If that were the case ("don't actually call eq when you reckon it'll return True"), then yes, failing to special-case NaN would be a bug. But since it's intended behaviour, as explained further down, it's not a bug and not the result of forgetfulness.
Right, it's not a mere optimisation - it's the only way to get containers to behave sensibly. Otherwise we'd end up with nonsense like:
x = float("nan") x in [x] False
That currently returns True because of the identity check - it would return False if we delegated the check to float.eq because the defined IEEE754 behaviour for NaN's breaks the mathematical definition of an equivalence class as a transitive, reflexive and commutative operation. (It breaks it for good reasons, but we still need to figure out a way of dealing with the impedance mismatch between the definition of floats and the definition of container invariants like "assert x in [x]")
The current approach means that the lack of reflexivity of NaN's stays confined to floats and similar types - it doesn't leak out and infect the behaviour of the container types.
What we've never figured out is a good place to document it. I thought there was an open bug for that, but I can't find it right now.
Cheers, Nick.
-- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
- Previous message: [Python-Dev] == on object tests identity in 3.x - list delegation to members?
- Next message: [Python-Dev] == on object tests identity in 3.x - list delegation to members?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]