[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