Hacer referencia a primitivas globales frente a objetos

¿Podría alguien explicar el siguiente resultado en Python?

Al ejecutar el siguiente fragmento de código, Python arroja un error, diciendo que la variablex fue referenciado antes de la asignación:

x = 1

def increase_x():
    x += 1

increase_x()

La solución, por supuesto, sería incluir la línea.global x después de la declaración de función paraincrease_x.

Sin embargo, al ejecutar este próximo fragmento de código, no hay error y el resultado es lo que espera:

x = [2, -1, 4]

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

increase_x_elements()

¿Es esto porque los enteros son primitivos en Python (en lugar de objetos) y asíx en el primer fragmento es un primitivo almacenado en la memoria mientrasx en el segundo fragmento hace referencia a un puntero a un objeto de lista?

Respuestas a la pregunta(1)

Su respuesta a la pregunta