Te recomiendo leer
locals and globals del libro "dive into python"
En caso de no saber ingles, te traduzco la parte importante.
Cita:
Iniciado por Dive into Python Cuando una linea de código pregunta por el valor de la variable x, Python buscara esta variable en todos los namespaces (nombre de espacio) disponibles, en el siguiente orden:
local namespace (nombre de espacio local) - Espefica a la función o método de clase actual. Si la funcion define una variable local x, o tiene un argumento x, Python usara esta y dejara de buscar.
global namespace (nombre de espacio global) - Especifica al modulo actual. Si el modulo tiene definido la variable, función o clase llamada x, Python usara esta y dejara de buscar.
built-in namespace (nombre de espacio integrado)- Global en todo los módulos. Como ultimo recurso, Python asumirá que x es el nombre de una built-in función o variable