Referencias a propiedades de clases

Jose Caballero jcaballero.hep en gmail.com
Vie Jul 11 17:32:40 CEST 2008


2008/7/11 Alexis Roda <alexis.roda.villalonga en gmail.com>:

> En/na Jose Caballero ha escrit:
>
>> Hola,
>>
>> No todo son objetos que se pasan por referencia.
>> Tal y como lo haces no va a funcionar. Cuando creas la lista para pasarla
>> como argumento a f(), a.nombre es una copia, y por tanto el objeto a no va
>> a
>> ver los cambios tras llamar a f().
>>
>
> No exactamente, no se pasa una copia de a.nombre sino una referencia a la
> cadena "hola".
>
> Lo que ocurre es que al hacer s += " mundo" se genera una nueva cadena, no
> se modifica la cadena s (las cadenas son inmutables) in situ, que es lo que
> haría falta para que el cambio se viese reflejado en el atributo 'nombre'
> del objeto (que sigue manteniendo una referencia a la cadena original):
>
> >>> s="hola"
> >>> id(s)
> -1210547648
> >>> s += " mundo"
> >>> s
> 'hola mundo'
> >>> id(s)
> -1210551208
> >>>
>
> La lista es mutable, por lo que en este caso el cambio sí es visible en el
> atributo 'arr'.
>
> >>> l=[]
> >>> id(l)
> -1210547668
> >>> l.append(1)
> >>> id(l)
> -1210547668
> >>>
>
>
>
Esa explicación es más precisa y correcta. Yo no me expliqué correctamente.
En esa dirección apunta el código de ejemplo que pasaba en un último e-mail.


Saludos.
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es