[pyar] Sobre grafos, nodos y objetos

Tordek kedrot en gmail.com
Sab Nov 6 07:15:33 ART 2010


On 05/11/10 21:39, Jose Jachuf wrote:
> ¿Por qué se están creando objetos diferente?

Porque eso hace _agregar_nodos_simples():

         for n, r in enumerate(archivo):
             r = r.strip('\n').split(',')

#crea un nodo de origen

             nodo1 = NodoSimple(int(r[2]),
                     float(r[3]),
                     float(r[4]))

#y un nodo de destino

             nodo2 = NodoSimple(int(r[5]),
                     float(r[6]),
                     float(r[7]))

> ¿Está mal algo referente a __eq__ y __hash__ en la clase Nodo?

No... simplemente que la igualdad de los nodos se revisa via 
__hash__ y __eq__, no porque su id sea igual.

 >>> a = 15000
 >>> b = 15000
 >>> id(a)
38994944
 >>> id(b)
38995088

# mismo valor, distintos IDs. números simples así no hay que 
preguntarse sobre si las funciones están bien

 >>> g = nx.Graph()
 >>> g.add_edge(15, a)
 >>> g.add_edge(30, b)
 >>> g.add_edge(a, 40)
 >>> g.add_edge(b, 50)
 >>> g.add_edge(b, 60)
 >>> g.add_edge(b, 60000)
 >>> for x, y in g.edges_iter(): print x, id(x), y, id(y)
...
60000 47373816 15000 38995088 # 60000,b
40 38721368    15000 38994944 # 40,a
15 38719976    15000 38994944 # 15,a
50 38721128    15000 38995088 # 50,b
15000 38994944 60 38720888    # a,60 (agregué b,60)
15000 38994944 30 38719616    # a,30 (agregué 30,b)

La clase hace decisiones raras con respecto a cuando usar un ID o el 
otro. Si querés que todos los nodos iguales tengan el mismo ID, 
tendrás que modificar la creación de objetos. (Obviamente, esto solo 
será necesario si tus objetos son mutables.)

> Desde ya muchas gracias.
>
> Jose


-- 
Guillermo O. «Tordek» Freschi. Programador, Escritor, Genio Maligno.
http://tordek.com.ar :: http://twitter.com/tordek
http://www.arcanopedia.com.ar - Juegos de Rol en Argentina



More information about the pyar mailing list