Python の 'and' や 'or' で、左右への値の記述方法によって結果が異なるのはなぜ？


Pythonで `print(0 or (1 and 2))` と入力した場合、返ってくる値は 2 ですが、`print(0 or (2 and 1))`
とした場合、返ってくる値が 1 になるのはなぜですか？ヘルプを参照したのですがいまいちしっくり来ませんでした。

たくさんのパターンを試し、Trueの場合一番右に位置する数字が返ってくることまではわかったのですが、そうなる訳を知りたいです。

お答えいただけると幸いです。




Python 言語リファレンス  
<https://docs.python.org/ja/3/reference/expressions.html#boolean-operations>  
の  
6.11. ブール演算 (boolean operation)  
に

> 式 x and y は、まず x を評価します; x が偽なら x の値を返します; それ以外の場合には、 y の値を評価し、その結果を返します。

と規定されています。

