Pasar por referencia vs. Valor en Python

Pasar por referencia vs. Valor en Python
Después de conocer Python, puede encontrar casos en los que las funciones no alteran los argumentos en un lugar como anticiparía, particularmente si está familiarizado con muchos otros lenguajes de computadora. Muchos idiomas usan argumentos de métodos como referencias, definidas como aprobar por referencia a las variables actuales. Si eres un desarrollador avanzado de Python que quiere agarrar la forma particular de Python de tratar los argumentos del método, entonces esta guía es realmente para ti.

Python admite Pase por referencia de objetos

Pase por referencia y paso por valor son sin duda las dos formas bien reconocidas y fácilmente comprensibles para parámetros de pasar entre los lenguajes de programación. Python es, lamentablemente, 'pase-by-object-reference,' ni "pasar por valor" ni "pasar por referencia", a menudo denominada "llamada por referencia de objeto", así como "llamar compartiendo compartiendo."Es útil mirar más de cerca el concepto en sí mismo dividiéndolo en segmentos mientras se sumerge en los detalles técnicos del paso por referencia:

Aprobar: Esto significa suministrar un método con un argumento.

Por referencia: Esto significa que el argumento que pasa al método se refiere a una variable que ahora reside en el almacenamiento en lugar de una réplica diferente de esa variable.

Al asignar el método una referencia a una variable definida, la variable a la que corresponde sería influenciada explícitamente por todas las operaciones en esta referencia. Ahora consideremos un ejemplo de cómo, en la práctica, esto funciona. En este ejemplo, hemos definido una variable 'arg ' tener un valor de 4. A lo largo de este escenario, la variable 'arg ' no fue modificado en su lugar. Python parece manejar su argumento provisto en lugar de una referencia a una variable actual como un valor autónomo.

¿Significaría esto que en lugar de por referencia, Python mueve los argumentos por valor?? Python mueve los argumentos a través de la asignación, por lo que ni por referencia ni con valor. La lógica para esto es dos veces:

Actualmente, el parámetro que pasa es un puntero a un objeto. Ciertos tipos de datos son mutables, y algunos no son mutables.

Si movemos un objeto mutable a una función, la función adquiere una referencia al mismo objeto para que pueda mutarlo todo a satisfacción de su alma; Sin embargo, el alcance externo no sabría nada antes de reunirse con la referencia en la función. Una vez que haya terminado, la referencia externa solo apuntará al objeto real. Si mueve un objeto inmutable a una función, la referencia externa no siempre se puede volver a unir, y no puede simplemente mutar el objeto. Para hacer las cosas mucho más directas, entendamos uno por uno.

Pasar por referencia

En primer lugar, debe entender que la variable 'mylist' en sí no es una lista, sino que se refiere a una lista que tiene valores. Puede llamar a la variable 'mylist' un contenedor que tiene valores dentro de él. Los valores de la lista son objetos. La variable 'mylist' se ha entregado directamente a la función con su contenido.

Tanto la "lista" como "mi lista" parecen ser la misma variable de almacenamiento en el ejemplo del código a continuación y, por lo tanto, se aplican al mismo objeto de almacenamiento. Es por eso que en la salida, imprime 'Saeed.'

Cualquier acción realizada sobre la variable o entidad se reflejaría inmediatamente al método de llamadas. El método puede modificar por completo el valor de la variable y apuntarlo a un objeto totalmente distinto. Como puede ver en la función 'set_list', hemos cambiado el contenido de la lista e imprimido una lista completamente nueva que tiene el elemento 'AQSA.'Esto se debe a que hemos devuelto la lista modificada y la imprimimos en la misma línea que la persona que llama.

El método también puede reasignar los elementos de la variable para el mismo resultado que a continuación. Puede ver que hemos agregado un nuevo valor en la lista, y el cambio se ha reflejado. Hemos agregado una cadena única a una lista y la devolvimos a la persona que llama. Para concluir, el método y la persona que llama ha estado utilizando la misma variable y objeto a lo largo de la relación de pasar por.

Pasar por valor

A través de Pass by Value, el método se suministra con un duplicado del objeto de argumento que la persona que llama le asigna. Esto asegura que el elemento original permanezca sin cambios y todas las modificaciones realizadas se conservan en ubicaciones de memoria separadas en una réplica del mismo objeto.

Es igualmente válido con cualquier operación ejecutada en una variable o la entidad por el método. Los duplicados de variables y objetos en el alcance del método del llamador están completamente separados para resumirlas.

Pasar objeto por referencia

A lo largo de esta situación, dado que Python es distinto, los métodos de Python obtienen la referencia de objeto muy similar en el almacenamiento a medida que la persona que llama se refiere a. Por el contrario, la técnica no obtiene la variable 'mylist' (el contenedor). El método de la persona que llama almacena el mismo objeto; El método genera el contenedor de uno y genera un índice completamente nuevo para el suyo, al igual que en el valor de pasar por.

La persona que llama y el método hablan del mismo objeto en el almacenamiento, pero cuando el método adjunto aplica un elemento externo a una lista, la entidad de llamadas se modifica. Tienen múltiples etiquetas, pero son las mismas cosas. Ambas variables tienen un objeto muy similar. Ese es el sentido detrás de su relación con el movimiento del objeto. En el almacenamiento, el método y la persona que llama usa un objeto similar y los atrapa a través de múltiples variables. La variable de llamadas (el contenedor) no se cambiará por ninguna modificación realizada a la variable de método (el contenedor); Solo se modifican los datos o el contenido.

Conclusión

Python opera de forma independiente desde idiomas que aceptan el movimiento por referencia o valor de los argumentos. Los argumentos del método son variables locales que se han asignado a cada valor transferido al método. Pero eso todavía no le impide obtener los mismos resultados que encontraría en otros idiomas mientras mueve los argumentos por poder.