Referenciando primitivos globais x objetos

Alguém poderia explicar o seguinte resultado em Python?

Ao executar o seguinte trecho de código, o Python gera um erro, dizendo que a variávelx foi referenciado antes da atribuição:

x = 1

def increase_x():
    x += 1

increase_x()

A solução, é claro, seria incluir a linhaglobal x após a declaração da função paraincrease_x.

No entanto, ao executar este próximo trecho de código, não há erro, e o resultado é o que você espera:

x = [2, -1, 4]

def increase_x_elements():
    for k in range(len(x)):
        x[k] += 1

increase_x_elements()

Isso ocorre porque números inteiros são primitivos em Python (em vez de objetos) e assimx no primeiro trecho é um primitivo armazenado na memória enquantox no segundo trecho faz referência a um ponteiro para um objeto de lista?

questionAnswers(1)

yourAnswerToTheQuestion