Porque b = a y a = [1,2,3,4] son declaraciones vinculantes . Evalúan una expresión a la derecha y vinculan los resultados a algún nombre a la izquierda.
Los resultados de la evaluación de la expresión son un objeto. El enlace es una referencia a ese objeto. [1,2,3,4] es una lista literal compuesta de una secuencia de valores literales enteros. En b = a, a es ya una simple referencia a un objeto, por lo que b se convierte en otra referencia al mismo objeto. Ahora son alias entre sí.
Si está familiarizado con la semántica del sistema de archivos Unx, a y b son como enlaces al mismo inodo. El objeto es como el contenido del archivo almacenado a través de ese inodo.
En general, esta distinción entre “” vincular nombres a referencias de objetos “versus” asignar valores a nombres de variables “solo es significativa cuando se trata de objetos mutables (listas, diccionarios, conjuntos, conjuntos de bytes, etc. ). Para objetos inmutables (números, cadenas de Python , etc. ) es simplemente un detalle de implementación que debería ser completamente transparente para los programadores.
- ¿Cuál es la integración de sqrt (tanx)?
- ¿Cómo puedo probar que para 0 <a <b, si h está definido por 1 / h = 1/2 (1 / a + 1 / b), entonces a <h <b?
- ¿Cómo encontramos el último dígito de [matemáticas] 11 ^ {11 ^ {11}} [/ matemáticas]?
- ¿Cómo evalúo [math] \ displaystyle \ int \ frac {dx} {(x ^ 2-a ^ 2) ^ 3} [/ math]?
- ¿Cuál es la derivada de [matemáticas] y = \ dfrac {2 \ sin x} {\ sin x – \ cos x} [/ matemáticas]?
Para una copia superficial de una lista, es suficiente usar un segmento: b = a [:] para evaluar todos los elementos de a en un nuevo objeto de lista y vincularlo al nuevo nombre b.
Esta comprensión de la referencia frente a la creación de instancias y la copia frente a la copia profunda (recursiva) y la evaluación ansiosa frente a la floja son temas que deberá aprender y apreciar a medida que aprenda Python, o cualquier otra forma avanzada de programación.