Как оператор print создает локальные переменные

Вопрос в конце этого поста.

Первый фрагмент: пустой словарь локальной переменной.

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

Вывод: локальные переменные: {}

Второй фрагмент: печать внутри функции inner () и создание записи локальной переменной.

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

Выход:

1
Local variables: {'x': 1}

Третий фрагмент: del x изнутри внутренней функции:

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

Выход:

>>> 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
>>>

Вопросов :

Во втором фрагменте, как оператор print создает локальную переменную.Если это создает локальную переменную внутри внутренней функции, почему я не могу удалить ее.

Может кто-нибудь, пожалуйста, помогите мне понять это.

Ответы на вопрос(3)

Ваш ответ на вопрос