Asignación de lista vs. int: “Cada variable es un puntero”

Sé que es una pregunta muy básica, pero necesito ayuda para entender este breve concepto.

Estoy estudiando Python, y el libro dice: “Cada variable en Python es un puntero a un objeto. Por lo tanto, cuando escribes algo como y=x , estás de hecho haciendo que ambas apunten al mismo objeto. Si cambias el objeto original. , cambiarás cada otro puntero que lo apunte ”

Y luego dan un ejemplo:

 x=[1,2,3] y=x x[1]=3 print y 

Y efectivamente imprime [1,3,3]

Sin embargo, cuando escribí el siguiente código:

 x=5 y=x x=7 print y 

No imprime 7. Imprime 5.

¿Por qué?

Su primer ejemplo se puede explicar de la siguiente manera:

 x=[1,2,3] # The name x is assigned to the list object [1,2,3] y=x # The name y is assigned to the same list object referenced by x x[1]=3 # This *modifies* the list object referenced by both x and y print y # The modified list object is printed 

El segundo ejemplo, sin embargo, solo reasigna el nombre x a un objeto entero diferente:

 x=5 # The name x is assigned to the integer object 5 y=x # The name y is assigned to the same integer object referenced by x x=7 # The name x is *reassigned* to the new integer object 7 print y # This prints 5 because the value of y was never changed 

Aquí hay una referencia sobre la asignación en Python .