teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2018/08/21 14:24

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -28,4 +28,18 @@
28
28
 
29
29
  **註:**
30
30
  `object.__eq__`をオーバーライドすればハック可能ではあります。
31
- 同一オブジェクトの比較でFalseを返す実装なんて、真っ当な人なら採用しませんが。
31
+ 同一オブジェクトの比較でFalseを返す実装なんて、真っ当な人なら採用しませんが。
32
+
33
+ **追記:**
34
+ 良く考えれば、`nan`同士の比較は常にFalseを返すんでした。
35
+ ```Python
36
+ >>> nan = float('nan')
37
+ >>>
38
+ >>> nan is nan
39
+ True
40
+ >>> nan == nan
41
+ False
42
+ ```
43
+
44
+ ただし、これはかなり特殊なケースです。
45
+ 普通は`a is b`がTrueなら`a == b`もTrueになると思ってよいでしょう。

1

追記

2018/08/21 14:24

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -18,11 +18,14 @@
18
18
  この差はなかなか理解しがたいものがあるので、
19
19
  とりあえず『Noneのときはisを使うんだな』という感覚でも問題ないと思います。
20
20
 
21
+ 調べると説明はいろいろ出てきますので、まずはひととおり読んでみましょう。
22
+ [Google - python == is](https://www.google.co.jp/search?q=python+%3D%3D+is)
23
+
21
24
  > 下のように記述した結果、違う出力結果が出てきました。
22
25
 
23
26
  その疑問に基づいて`is not`を置き換えるならば`!=`では。
24
27
  ふつう(註)はそれでも期待通り動作するはずです。
25
28
 
26
29
  **註:**
27
- object.__eq__をオーバーライドすればハック可能ではあります。
30
+ `object.__eq__`をオーバーライドすればハック可能ではあります。
28
31
  同一オブジェクトの比較でFalseを返す実装なんて、真っ当な人なら採用しませんが。