Cierre de pitón con asignación de variable externa dentro de la función interna

Tengo este pedazo de código:

#!/usr/bin/env python

def get_match():
  cache=[]
  def match(v):
    if cache:
      return cache
    cache=[v]
    return cache
  return match
m = get_match()
m(1)

Si lo ejecuto, dice:

UnboundLocalError: local variable 'cache' referenced before assignment

pero si hago esto:

#!/usr/bin/env python

def get():
  y = 1
  def m(v):
    return y + v
  return m

a=get()
a(1)

corre.

¿Hay algo con la lista? o mi organizacion de codigo esta mal?

Respuestas a la pregunta(4)

Su respuesta a la pregunta