paso por valor y paso por referencia

Antonio Castro acastro en ciberdroide.com
Lun Oct 25 09:55:05 CEST 2004


On Sat, 23 Oct 2004 ch3m4 en ch3m4.org wrote:

> Mensaje citado por Antonio Castro <acastro en ciberdroide.com>:
>
> > Tal como yo lo veo, desaparece es el clásico concepto de variable como
> > contenedor de valores y el concepto de constante. Ambos se implementan
> > con objetos.
> >
> > Engaña un poco porque el identificador de la mal llamada variable no
> > cambia pero despues de la asignación ya no es la misma. No solo cambia
> > su contenido, cambia el objeto en si.
>
> Lo que en otros lenguajes se conocen como variables y constantes, en python son
> meras "etiquetas" con las que referencias a objetos que pululan por la memoria.
> Estos objetos se suelen crear como resultado de una operación, pero no siempre.
> Durante el arranque de python, se crean una serie de objetos de uso frecuente
> como los números enteros entre -1 y 99. Repite las pruebas con ellos y verás
> que tienen comportamiento diferente.
>
> >>> a=5
> >>> b=5
> >>> id(a),id(b),id(2+3)
> (134536648, 134536648, 134536648)
>
> >>> a=100
> >>> b=100
> >>> id(a),id(b),id(88+2)
> (134606744, 134606768, 134537604)

Muy interesante. No ténía ni idea. Seguramente hay muchos detalles
de implementación curiosos.

> Por si te interesa, hace unos días postulé unas reglas sobre la Ontología de
> Objetos en python
> (http://ch3m4.org/blog/index.php/py/2004/09/21/ontologia_de_objetos_en_python)


Una de las cosa que tu afirmas me parece un tanto arriesgada.

    2. No son los objetos los que "varían", sino las referencias que
       apuntan a ellos.

Creo que los objetos si son capaces de variar y conservar su referencia.
Un ejemplo:

    >>> a=[]
    >>> id(a)
    1075963212
    >>> a.append('Modifico el objeto')
    >>> id(a)
    1075963212


-- 
Un saludo
Antonio Castro

       /\     /\
         \\W//
        _|0 0|_
+-oOOO-(___o___)-OOOo---------------------+
| . . . . U U . Antonio Castro Snurmacher |
| . . . . . . . acastro en ciberdroide.com   |
+()()()---------()()()--------------------+




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