[Programación]Paso por valor o referencia? En las funciones en Python
Fabian Ezequiel Gallina
galli.87 en gmail.com
Mie Sep 19 20:45:11 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...
>
> In [2]: def f(x,y):
> ...: x=x+3
> ...: y.append(23)
> ...: 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...
>
Más alla del tono despectivo con el cual dirigís tus preguntas y lo
poco bien parado que te deja en general afrontar los asuntos de tal
manera te lo voy a responder cortito y al pié. En Python todo es una
referencia, sin embargo hay objetos que son mutables (proveen métodos
a través de los cuales se pueden modificar) y otros que son
inmutables. Es a estos últimos por su característica de ser que no
pueden ser modificados y cualquier operación sobre ellos termina
resultando en un nuevo objeto generado a partir del original pero
diferente a él.
Los types mutables que son built-in son: list, dict (y el nuevo bytearray).
Los inmutables, como habrás imaginado son: int, string, tuple,
complex, float, bool.
Con esto nuevo que ahora sabés, por qué es que tu ejemplo no le cambia
la valor al x original?
Saludos,
--
Fabián E. Gallina
http://www.from-the-cloud.com
Más información sobre la lista de distribución Programacion