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]

questionAnswers(1)

yourAnswerToTheQuestion