Dlaczego w numpy `nan == nan` jest Fałsz, podczas gdy nan w [nan] jest Prawda?

Podczas gdy pierwsza część pytania (która znajduje się w tytule) była już kilkakrotnie udzielana (tj.Dlaczego NaN nie jest równy NaN?), Nie rozumiem, dlaczego drugi utwór działa tak jak on (zainspirowany tym pytaniem)Jak sprawdzić listę zawierającą NaN)?

Mianowicie:

>> nan == nan
False

>> nan in [nan]
True

Dodatek wyjaśniający do pytania dotyczącego odpowiedzi z @DSM. Więc dlaczegofloat("nan") inaczej się zachowujenan? Czy nie powinno się to powtórzyć, aby było prostenan i dlaczego tłumacz zachowuje się w ten sposób?

>> x = float("nan")
>> y = nan
>> x
nan
>> y
nan
>> x is nan, x is float("nan"), y is nan
(False, False, True)

Zasadniczo odnosi się do tego samego rodzajunan w pierwszym przypadku, ale tworzy oddzielny obiekt w drugim:

>> 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