Por que em numpy `nan == nan` é False enquanto nan em [nan] é True?
Enquanto a primeira parte da questão (que está no título) foi respondida algumas vezes antes (ou seja,Por que NaN não é igual a NaN?), Não vejo por que a segunda peça funciona da maneira que faz (inspirada nessa pergunta)Como verificar lista contendo NaN)
Nomeadamente:
>> nan == nan
False
>> nan in [nan]
True
Um adendo explicativo à pergunta considerando a resposta do @DSM. Então por quefloat("nan")
está se comportando de maneira diferentenan
? Não deveria avaliar novamente para simplesnan
e por que o intérprete se comporta dessa maneira?
>> x = float("nan")
>> y = nan
>> x
nan
>> y
nan
>> x is nan, x is float("nan"), y is nan
(False, False, True)
Basicamente, refere-se ao mesmo genériconan
no primeiro caso, mas cria um objeto separado no segundo:
>> nans = [nan for i in range(2)]
>> map(id, nans)
[190459300, 190459300]
>> nans = [float("nan") for i in range(2)]
>> map(id, nans)
[190459300, 190459301]