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?