Referencias a propiedades de clases

Jose Caballero jcaballero.hep en gmail.com
Vie Jul 11 16:49:55 CEST 2008


Hola,

ejecuta esto y lo vas a entender


def f(s):
   s += ' mundo'

def g(x):
   x += 1

def h(l):
   l.append(1)


ss = 'hola'
f(ss)
print ss

xx = 0
g(xx)
print xx

ll = []
h(ll)
print ll






El día 11 de julio de 2008 10:42, Beni <camontuyu en yahoo.es> escribió:

> 2008/7/11 Jose Caballero <jcaballero.hep en gmail.com>:
>
> > 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().
> >
> > Jose
> >
> >
> Eso es lo que supuesto por el comportamiento del código... con lo que he
> probado con una pequeña variante, pasando a la lista un objeto, en este
> caso
> un array.
>
> class A(object):
>    def __init__(self):
>        self.nombre = "hola"
>         self.arr = []
>
>    def __str__(self):
>        return self.nombre + " " + str(self.arr)
>
> def f(lista):
>    for e in lista:
>        e[0] += " mundo"
>
> def g(lista):
>    for e in lista:
>         e[0].append(1)
>
> a = A()
>
> print a
>
> f([[a.nombre, None, None], ])
> g([[a.arr, None, None], ])
>
> print a
>
> Imprimiendo
>
> hola []
> hola [1]
>
> ¿que pasa que la cadena no es un objeto? ¿por que ocurre esto?
>
> --
> Benito Rodríguez Arcos
>
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>
_______________________________________________
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