en Python todo va por referencia
En Python, todo es una referencia, y las referencias pasar por valor
Si desea utilizar esos términos. Pero esos términos hacen que las cosas sean más difíciles de entender.
mucho más sencillo: en Python, una variable es un nombre para un objeto. =
se usa para cambiar a qué objeto se refiere un nombre. El lado izquierdo puede referirse a parte de un objeto existente, en cuyo caso el objeto completo se cambia reemplazando esa parte. Esto se debe a que el objeto, a su vez, no contiene realmente sus partes, sino que contiene más nombres, que pueden provocar que comiencen a referirse a cosas diferentes.
¿Cuándo se crea un objeto nuevo?
Los objetos se crean cuando se crean (utilizando el constructor de la clase, o en el caso de los tipos incorporados que tienen una representación literal, escribiendo un literal). No entiendo cómo esto es relevante para el resto de su pregunta.
m = m[1:] # m changes its reference to the new sliced list
Sí, por supuesto. Ahora m
se refiere al resultado de evaluar m[1:]
.
edits m but not d (I wanted to change d)
Sí, por supuesto. ¿Por qué le cambia d
? No era un tipo de magia, simplemente era el resultado de evaluar d['m']
. Exactamente lo mismo sucede en ambas líneas. mirada
Vamos a un ejemplo más simple.
m = 1
m = 2
¿Esto 1
para convertirse en 2
? No claro que no. Los enteros son inmutables. Pero ocurre lo mismo: m
tiene como objetivo nombrar una cosa, y luego nombrar otra cosa.
O, de otra manera: si las "referencias" iban a funcionar como usted espera, entonces la línea m = m[1:]
sería recursiva. Estás esperando que significa "en cualquier lugar que se ve m
, lo tratan como si significara m[1:]
". Bueno, en ese caso, habría m[1:]
significa realmente m[1:][1:]
, lo que significaría entonces m[1:][1:][1:]
, etc.
Si usted es un estudiante visual, [esto es] (http://people.csail.mit.edu/pgbovine/python /) un buen tutorial – forivall
Comentario extremadamente útil Sr. @jordoex - ¡Seriamente increíble! –