[Programación]Paso por valor o referencia? En las funciones en Python
Emiliano Gavilan
emilianogavilan en gmail.com
Mie Sep 19 17:02:27 ART 2012
El día 19 de septiembre de 2012 16:42, Horacio Castellini
<horacio9573 en yahoo.com.ar> escribió:
> A mi o me engañaron como un niño, o todos los que dicen que en python el
> paso es por referencia versean, pero el siguiente ejemplo muestra que
> depende del tipo de argumento...
No. Lo que si depende del tipo de argumento es la posibilidad o no de
modificar el valor "in place"
> In [2]: def f(x,y):
> ...: x=x+3
^------------
Aca no se modifica en la misma posicion de memoria; primero el
interprete construye el objeto
de la derecha (x+3), despues se lo asigna (rebind) a x. Despues de
esta operación, x ya no
apunta al objeto original, sino al nuevo. El viejo aun es mantenido si
hay referencias adicionales,
sino es "garbage collected"
> ...: y.append(23)
^------------
Aca no hay problemas; la variable y no es reasignada a otro objeto,
sino que el objeto
original se modifica "in place"
> ...: print x, y
> ...:
>
> In [3]: x=22
>
> In [4]: y=[22]
>
> In [5]: f(x,y)
> 25 [22, 23]
>
> In [6]: print x,y
> 22 [22, 23]
>
> En (5) se ve que se modificaron los contenidos en la instancia de la
> función, pero fuera de ella (6), solo la lista se ve afectada, entonces, que
> quedamos?? alguien me lo puede aclarar...
Lo podes pensar asi: si hay una asignacion, la referencia al objeto original se
pierde y es reemplazada por el objeto de la derecha del signo igual.
Saludos
Emiliano
Más información sobre la lista de distribución Programacion