Sé que la "asignación de variables" en python es, de hecho, un enlace / reenlace de un nombre (la variable) a un objeto.
b = [1,2,3]
a = b[2] # binding a to b[2] ?
a = 1000
B es [1, 2, 3]
Después de este cambio, ¿por qué b no se cambia?
Aquí hay otro ejemplo:
b = [1,2,3]
a = b
a[0] = 1000
Este caso b es [1000, 2, 3]
¿no es la asignación en el enlace de referencia de Python?
Gracias
3 respuestas
a = b[2] # binding a to b[2] ?
Específicamente, esto une el nombre a
al mismo valor al que hace referencia b[2]
. No une a
al elemento en la lista b
en el índice 2
. El nombre a
es completamente independiente de la lista de donde obtuvo su valor.
a = 1000
Ahora vincula el nombre a
a un nuevo valor, el entero 1000
. Como a
no tiene asociación con b
, b
no cambia.
En tu segundo ejemplo:
a = b
Ahora a
está vinculado al mismo valor de lista al que b
está vinculado. Entonces cuando lo haces
a[0] = 1000
Modifica un elemento en la lista subyacente que tiene dos nombres diferentes. Cuando acceda a la lista por cualquier nombre, verá el mismo valor.
Las listas son objetos mutables, los ints no lo son. 4 no puede convertirse en 5 en python, pero una lista puede cambiar su contenido.
a[0] = ...
es una forma especial de asignación que se desugará a una llamada al método,
a.__setattr__(0, ...)
No está reasignando el nombre a
; está asignando un "espacio" en el objeto al que se hace referencia por a
(y b
).
Preguntas relacionadas
Preguntas vinculadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.