スコープ
関数が実行されると、その関数内で有効な名前空間が作られます。その関数内で新しく作られた変数は同じ名前が外部にあっても関数内でローカル(別々の変数)です。例えば次の関数はaを書き換えているように見えますが、aは関数内でローカルな別の変数なので外部のaの値が変化することはありません。
a = 0
def foo():
...
a = 1
...
print a
この結果は0と表示されます。
関数内で外部のaを参照したいときは、内部でaという変数を作らない(代入しない)なら参照することができます。もし、外部のaを関数内で変更したいときはglobalキーワードを使って、外部のaを使うことを宣言します。
a = 0
def foo():
global a
a = 1
foo()
print a
この結果は1となります。