3つのインスタンスすべてに表示されるのは、言語の文法仕様の結果であり、ソースコードで検出されたトークンを解析して解析ツリーを生成する方法です。
この低レベルのコードを見てみると、内部で何が起こっているかを理解するのに役立ちます。これらのpythonステートメントを取得してバイトコードに変換し、dis
モジュールを使用して逆コンパイルできます。
ケース1: (0, 0) == 0, 0
>>> dis.dis(compile("(0, 0) == 0, 0", '', 'exec'))
1 0 LOAD_CONST 2 ((0, 0))
3 LOAD_CONST 0 (0)
6 COMPARE_OP 2 (==)
9 LOAD_CONST 0 (0)
12 BUILD_TUPLE 2
15 POP_TOP
16 LOAD_CONST 1 (None)
19 RETURN_VALUE
(0, 0)
最初に最初と比較され0
、に評価されFalse
ます。次に、この結果と最後0
でタプルが構築されます(False, 0)
。
ケース2: 0, 0 == (0, 0)
>>> dis.dis(compile("0, 0 == (0, 0)", '', 'exec'))
1 0 LOAD_CONST 0 (0)
3 LOAD_CONST 0 (0)
6 LOAD_CONST 2 ((0, 0))
9 COMPARE_OP 2 (==)
12 BUILD_TUPLE 2
15 POP_TOP
16 LOAD_CONST 1 (None)
19 RETURN_VALUE
タプルは0
最初の要素として構築されます。2番目の要素については、最初のケースと同じチェックが行われ、に評価されるFalse
ため、が得られ(0, False)
ます。
ケース3: (0, 0) == (0, 0)
>>> dis.dis(compile("(0, 0) == (0, 0)", '', 'exec'))
1 0 LOAD_CONST 2 ((0, 0))
3 LOAD_CONST 3 ((0, 0))
6 COMPARE_OP 2 (==)
9 POP_TOP
10 LOAD_CONST 1 (None)
13 RETURN_VALUE
ここでは、ご覧の(0, 0)
とおり、これら2つのタプルを比較してreturnしていTrue
ます。