いいえ、一番上のコーデックは Python にソース コードの解釈方法を通知するだけで、そのコーデックを使用して Unicode リテラルを解釈します。リテラルのバイト文字列を Unicode 値に変換しません。PEP 263が述べているように:
この PEP は、Python ソース ファイルのエンコーディングを宣言する構文を導入することを提案しています。エンコーディング情報は、指定されたエンコーディングを使用してファイルを解釈するために、Python パーサーによって使用されます。最も注目すべきは、これによりソース コード内の Unicode リテラルの解釈が強化され、Unicode 対応エディターで直接 UTF-8 などを使用して Unicode リテラルを記述できるようになることです。
鉱山を強調します。
コーデック宣言がなければ、Python は非 ASCII 文字を解釈する方法がわかりません:
$ cat /tmp/test.py
example = '☃'
$ python2.7 /tmp/test.py
File "/tmp/test.py", line 1
SyntaxError: Non-ASCII character '\xe2' in file /tmp/test.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
Python が期待どおりに動作した場合、ASCII 以外のバイト値を含むバイト文字列値をリテラルにすることもできません。
端末が UTF-8 値を表示するように設定されている場合、UTF-8 でエンコードされたバイト文字列を出力すると「正しく」見えますが、エンコーディングが一致するという幸運によるものです。
Unicode 値を取得する正しい方法は、Unicode リテラルを使用するか、別の方法で Unicode を生成することです (バイト文字列からのデコード、整数コードポイントの Unicode 文字への変換など)。
unicode_snowman = '\xe2\x98\x83'.decode('utf8')
unicode_snowman = unichr(0x2603)
Python 3 では、名前に ASCII 範囲外の文字と数字を使用できるため、コーデックは変数名の解釈方法にも適用されます。Python 2 の ASCII とは対照的に、Python 3 のデフォルトのコーデックは UTF-8 です。