logo

Pasar por referencia vs valor en Python

Los desarrolladores que se lanzan a la programación en Python desde otros lenguajes como C++ y Java a menudo se sienten confundidos por el proceso de pasar argumentos en Python. El modelo de datos centrado en objetos y su tratamiento de asignación son las causas de la confusión en el nivel fundamental.

En el artículo, discutiremos el concepto de cómo pasar un valor por referencia en Python y intente comprender ejemplos de paso por referencia en pitón.

Tabla de contenidos



Pasar por valor y pasar por referencia en Python

Es posible que desees golpear algo después de leer más adelante, así que prepárate. El modelo de paso de argumentos de Python es ni Pasa por Valor ni Pasa por Referencia pero es Pasa por Referencia de Objeto.

Dependiendo del tipo de objeto que pase en la función, la función se comporta de manera diferente. Los objetos inmutables muestran el paso por valor, mientras que los objetos mutables muestran el paso por referencia.

Puede comprobar la diferencia entre paso por valor y paso por referencia en el siguiente ejemplo:

Python3


¿cuanto pesa kat timpf?



def> call_by_value(x):> >x>=> x>*> 2> >print>(>'in function value updated to'>, x)> >return> > def> call_by_reference(>list>):> >list>.append(>'D'>)> >print>(>'in function list updated to'>,>list>)> >return> > my_list>=> [>'E'>]> num>=> 6> print>(>'number before='>, num)> call_by_value(num)> print>(>'after function num value='>, num)> print>(>'list before'>,my_list)> call_by_reference(my_list)> print>(>'after function list is '>,my_list)>

>

>

Producción

  number before= 6    in function value updated to 12    after function num value= 6    list before ['E']    in function list updated to ['E', 'D']    after function list is ['E', 'D']>

En el código anterior, hemos mostrado cómo Python usa el concepto de llamada por objeto de referencia en su programa.

Pasamos un número entero en la función call_by_value(). Los números enteros son objetos inmutables, por lo que Python funciona según la llamada por valor y los cambios realizados en la función no se reflejan fuera de la función.

Luego pasamos list para que funcione por referencia. En la función call_by_reference() pasamos una lista que es un objeto mutable. Python funciona según llamada por referencia en esta función y los cambios realizados dentro de la función también se pueden ver fuera de la función.

La variable no es el objeto.

Aquí a es una variable que apunta a una lista que contiene los elementos X e Y. Pero a en sí misma no es una lista. Considere que a es un depósito que contiene los objetos X e Y.

 a = ['X', 'Y']>

¿Qué es pasar por referencia en Python?

Pasar por referencia significa que hay que pasar la función (referencia) a una variable, lo que significa que la variable ya existe en la memoria.

Aquí, la variable (el depósito) se pasa directamente a la función. La variable actúa como un paquete que viene con su contenido (los objetos).

En la imagen del código anterior, tanto list como my_list son la misma variable contenedora y, por lo tanto, hacen referencia al mismo objeto en la memoria. Cualquier operación realizada por la función en la variable o el objeto será reflejada directamente por la persona que llama a la función. Por ejemplo, la función podría cambiar completamente el contenido de la variable y apuntarla a un objeto completamente diferente:

Además, la función puede reasignar el contenido de la variable con el mismo efecto que se muestra a continuación:

Para resumir, en el paso por referencia, la función y la persona que llama usan la misma variable y objeto.

Pasar por referencia en el ejemplo de Python

En este ejemplo, la función modificar_lista toma una lista por referencia. La función agrega la cadena Geeks a la lista pasada dentro de la función y la imprime. Dado que las listas son tipos de datos mutables, los cambios realizados en la lista dentro de la función también se reflejan fuera de la función, como puede ver en el resultado.

Python3




def> modify_list(x):> >x.append(>'Geeks'>)> >print>(>'Inside function:'>, x)> > my_list>=> [>'Geeks'>,>'for'>]> modify_list(my_list)> print>(>'Outside function:'>, my_list)>

>

arquitectura java
>

Producción

  Inside function: ['Geeks', 'for', 'Geeks']    Outside function: ['Geeks', 'for', 'Geeks']>

¿Qué es pasar por valor en Python?

En este enfoque, pasamos una copia de el variables reales en la función como parámetro. Por lo tanto, cualquier modificación de los parámetros dentro de la función no se reflejará en la variable real.

Lo mismo es cierto para cualquier operación realizada por la función en la variable o el objeto.

En resumen, las copias de las variables y los objetos en el contexto del llamador de la función están completamente aisladas.

Pasar por valor en el ejemplo de Python

Aquí, pasaremos el número entero x a la función que es un tipo de datos inmutable. Luego actualizamos el valor del número entero dentro de la función e imprimimos el valor actualizado. Los cambios no se ven fuera de la función ya que los números enteros son tipos de datos inmutables.

Python3




def> modify_integer(x):> >x>=> x>+> 10> >print>(>'Inside function:'>, x)> > x>=> 5> print>(>'Before function call:'>, x)> modify_integer(x)> print>(>'After function call:'>, x)>

cómo comprobar el tamaño de la pantalla

>

>

Producción:

  Before function call: 5    Inside function: 15    After function call: 5>

La programación en Python utiliza el concepto de pasar por objeto de referencia al pasar valores a las funciones. Este artículo intenta mostrarle el concepto de paso por valor y paso por referencia en Python. Hemos mostrado diferentes casos de paso de valores con ejemplos. Pasar valores a una función en Python es diferente a otros lenguajes de codificación, pero con este tutorial podrás comprender fácilmente el concepto e implementarlo en tu trabajo.

Lea también:

¿Python llama por referencia o llama por valor?