Como a instrução print cria variáveis locais

As perguntas estão no final deste post.

Primeiro trecho: dicionário de variáveis locais vazio.

def outer():
    x = 1
    def inner():
        print "Local variables: %s" % locals()
    return inner()
print outer()

Saída: variáveis locais: {}

Segundo trecho: imprima dentro da função inner () e criando entrada de variável local.

def outer():
    x = 1
    def inner():
        print x
        print "Local variables: %s" % locals()
    return inner()
print outer()

Resultado:

1
Local variables: {'x': 1}

Terceiro trecho: del x de dentro da função interna:

def outer():
    x = 1
    def inner():
        print x
        print "Local variables: %s" % locals()
        del x
    return inner()
print outer()

Resultado:

>>> outer()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 7, in outer
  File "<stdin>", line 4, in inner
UnboundLocalError: local variable 'x' referenced before assignment
>>>

Questões :

No Segundo trecho, como a instrução print cria a variável local.Se ele cria uma variável local dentro da função interna, por que não consigo excluí-la.

Alguém poderia me ajudar a entender isso.

questionAnswers(3)

yourAnswerToTheQuestion