<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div><span><br></span></div><div><br></div>  <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"> <div dir="ltr"> <font face="Arial" size="2"> <hr size="1">  <b><span style="font-weight:bold;">De:</span></b> Fabian Ezequiel Gallina &lt;galli.87@gmail.com&gt;<br> <b><span style="font-weight: bold;">Para:</span></b> programacion@lugro.org.ar <br> <b><span style="font-weight: bold;">Enviado:</span></b> miércoles, 19 de septiembre de 2012 20:45<br> <b><span style="font-weight: bold;">Asunto:</span></b> Re: [Programación]Paso por valor o referencia? En las funciones en Python<br> </font> </div> <br>El día 19 de septiembre de 2012 16:42, Horacio Castellini<br>&lt;<a ymailto="mailto:horacio9573@yahoo.com.ar"
 href="mailto:horacio9573@yahoo.com.ar">horacio9573@yahoo.com.ar</a>&gt; escribió:<br>&gt; A mi o me engañaron como un niño, o todos los que dicen que en python el<br>&gt; paso es por referencia versean, pero el siguiente ejemplo muestra que<br>&gt; depende del tipo de argumento...<br>&gt;<br>&gt; In [2]: def f(x,y):<br>&gt;&nbsp; &nbsp; ...:&nbsp; &nbsp;  x=x+3<br>&gt;&nbsp; &nbsp; ...:&nbsp; &nbsp;  y.append(23)<br>&gt;&nbsp; &nbsp; ...:&nbsp; &nbsp;  print x, y<br>&gt;&nbsp; &nbsp; ...:<br>&gt;<br>&gt; In [3]: x=22<br>&gt;<br>&gt; In [4]: y=[22]<br>&gt;<br>&gt; In [5]: f(x,y)<br>&gt; 25 [22, 23]<br>&gt;<br>&gt; In [6]: print x,y<br>&gt; 22 [22, 23]<br>&gt;<br>&gt; En (5) se ve que se modificaron los contenidos en la instancia de la<br>&gt; función, pero fuera de ella (6), solo la lista se ve afectada, entonces, que<br>&gt; quedamos?? alguien me lo puede aclarar...<br>&gt;<br><br>Más alla del tono despectivo con el cual dirigís tus preguntas y
 lo<br>poco bien parado que te deja en general afrontar los asuntos de tal<br>manera te lo voy a responder cortito y al pié. <br>---------------<br>Perdón...!! vos a mi me criticas los comentarios,,, es como si Menguele me acusara de genocida... <br><br>--------------<br>En Python todo es una<br>referencia, sin embargo hay objetos que son mutables (proveen métodos<br>a través de los cuales se pueden modificar) y otros que son<br>inmutables. Es a estos últimos por su característica de ser que no<br>pueden ser modificados y cualquier operación sobre ellos termina<br>resultando en un nuevo objeto generado a partir del original pero<br>diferente a él.<br><br>Los types mutables que son built-in son: list, dict (y el nuevo bytearray).<br>Los inmutables, como habrás imaginado son: int, string, tuple,<br>complex, float, bool.<br><br>Con esto nuevo que ahora sabés, por qué es que tu ejemplo no le cambia<br>la valor al x
 original?<br><br>-----------------------------------<br><br>Si un objeto int fuera inmutable como una tupla o un string,, donde el "=" crea otro objeto inmutable, y a cada copia debería estar asignada a areas de memoria distinta, esto debería causar un memory overflow, por ejemplo en un código como este...<br><br>x=0<br>while True:<br><span class="tab">&nbsp;&nbsp;&nbsp; x=x+3<br><br></span><br>Si es cierto lo que alguna vez me dijo Emi que el python usa el sustrato de C, entonces como en C siempre el pasaje es por valor cosa queda mas clara, ya que en C sería el equivalente a :<br><br>bool f( int x, list **y){<br><span class="tab">&nbsp;&nbsp;&nbsp; </span><span class="tab">&nbsp;&nbsp;&nbsp; list *q__</span>, *p__;<br><span class="tab">&nbsp;&nbsp;&nbsp; </span><span class="tab">&nbsp;&nbsp;&nbsp; </span><span class="tab">x+=3;<br></span><span class="tab">&nbsp;&nbsp;&nbsp; </span><span class="tab">&nbsp;&nbsp;&nbsp;
 </span>for(p__=*y;p__-&gt;next!=(list*)0;p__=p__-&gt;next);<br><span class="tab">&nbsp;&nbsp;&nbsp; </span><span class="tab">&nbsp;&nbsp;&nbsp; </span>q__=(list*)malloc(sizeof(list));<br><span class="tab">&nbsp;&nbsp;&nbsp; </span><span class="tab">&nbsp;&nbsp;&nbsp; </span>q__-&gt;next=(list*)0;<br><span class="tab">&nbsp;&nbsp;&nbsp; </span><span class="tab">&nbsp;&nbsp;&nbsp; </span>q__-&gt;date=23;<br><span class="tab">&nbsp;&nbsp;&nbsp; </span><span class="tab">&nbsp;&nbsp;&nbsp; </span>p__-&gt;proximo=q;<span class="tab"></span><span class="tab"><br></span><span class="tab">&nbsp;&nbsp;&nbsp; </span><span class="tab">&nbsp;&nbsp;&nbsp; </span><span class="tab">retutn Null</span><br>}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>Donde se emula un pasaje por referencia que no es tal...<br> </div> </div>  </div></body></html>