Modificar las variables de función desde la función interna en python

Está bien obtener e imprimir la variable de función externaa

def outer():
    a = 1
    def inner():
        print a

También está bien para obtener la matriz de la función externaa y añadir algo

def outer():
    a = []
    def inner():
        a.append(1)
        print a

Sin embargo, causó algunos problemas cuando intenté aumentar el número entero:

def outer():
    a = 1
    def inner():
        a += 1 #or a = a + 1
        print a

>> UnboundLocalError: local variable 'a' referenced before assignment

¿Por qué sucede esto y cómo puedo lograr mi objetivo (aumentar el número entero)?

Respuestas a la pregunta(3)

Su respuesta a la pregunta