Python 3.5.2ドキュメント
4.6. 関数を定義する
...
関数を 実行 (execution) するとき、関数のローカル変数のために使われる新たなシンボルテーブル (symbol table) が用意されます。もっと正確にいうと、関数内で変数への代入を行うと、その値はすべてこのローカルなシンボルテーブルに記憶されます。一方、変数の参照を行うと、まずローカルなシンボルテーブルが検索され、次にさらに外側の関数のローカルなシンボルテーブルを検索し、その後...
従って、関数の中では、グローバルな変数を参照することはできますが、直接値を代入することは (global 文で名前を挙げておかない限り)できません。
シンボルテーブルを意識することによりPython3をうまく使えるかどうかは未消化。
(2016/11/01 追記)
@shiracamus さんにコメントにてglobals()とlocals()を教えていただきました。
情報感謝です。