¿Por qué la asignación a mis variables globales no funciona en Python?

Tengo problemas terribles para tratar de entender las reglas de alcance de Python.

Con el siguiente script:

a = 7

def printA():
    print "Value of a is %d" % (a)

def setA(value):
    a = value
    print "Inside setA, a is now %d" %(a)


print "Before setA"
printA()
setA(42)
print "After setA"
printA()

Da el resultado inesperado (para mí) de:

    Before setA
    Value of a is 7
    Inside setA, a is now 42
    After setA
    Value of a is 7

Donde esperaría que la última impresión del valor de a sea 42, no 7. ¿Qué me estoy perdiendo acerca de las reglas de alcance de Python para el alcance de las variables globales?

Respuestas a la pregunta(10)

Su respuesta a la pregunta