Python - Prb: Lista se me cambia de valor dentro de una fun

 
Vista:

Prb: Lista se me cambia de valor dentro de una fun

Publicado por martin_artaza (2 intervenciones) el 14/08/2007 21:35:14
Hola que tal, tengo un problema con una funcion que necesita una lista, la copio a esta lista (la llamo A), en otra la llamemos A, y cuando hago de todo con B, salgo y anda de 10 pero le pasa lo mismo a A. este es codigo:

## --------------- Comienzo del codigo -----------------
##nodo es el conjunto de cables, un punto en el circuito
##nombre, sera el nombre del nodo
##cantidad, es el ancho de bus del nodo, en espanol cuantos cables hay
##valores son los cables y su valor de voltaje
##o sea cuando se lee (0,0),(1.0),(2,1),(3,0) significa que los
##cables 0,1,3 estan en voltaje 0 o valor logico cero y el
##cable numero 2 esta en voltaje alto

class nodo:

def __init__(self, nombre, cantidad, valores = None):
self.nombre = nombre
self.cantidad = cantidad
if valores:
self.valores = valores
else:
self.valores = []
for i in range(self.cantidad):
self.valores.append((i,0))

def anadir(self, elemento):
self.valores.append(elemento)

def __str__(self):
return str(self.valores[:])

##signoextend es un componente electronico que agarra una cantidad de cables
##y completas hasta (cuanto valga hasta) con cables que tiene mismo voltaje que
##el primero, necesita un nodo de entrada (nodo) y (salida) es el nodo de salida

class signoextend:
def __init__(self, nodoentrada, nombre, hasta):
self.nombre = nombre
self.hasta = hasta or 32
self.nodoin = nodoentrada
self.nodosalida = self.nodoin
primero = self.nodosalida.valores[0][1]

j = self.nodosalida.cantidad
while j < self.hasta:
self.nodosalida.anadir((j,primero))
j = j+1

def salida(self):
return self.nodosalida
def __str__(self):
return str(self.nodosalida.valores[:])

b = nodo("pc",5)
print "imprimo el nodo b ", b
d = signoextend(b,"se",32)
print "imprimo de vuelta b ", b #aparece igual que d, se cambio y no quiero eso, quiero que
# se mantenga igual como estaba antes de entrar a signoextend

print "imprimo d", d # este anda bien, el que anda mal es b, se cambio de valor

## --------------- fin del codigo -----------------

desde ya muchas gracias, si copian y pegan el codigo se daran cuenta que ejecuta pero no lo que quiero.
Pd: Cualquier critica del codigo es bienvenida, recien empiezo con oo, eh leido pero nunca la implemente en un lenguaje como este, soy novato en python
pd2: muchas gracias por su tiempo.
pd3: está siendo ejecutado en windows, que guid me recomiendan para windows?
chauuuuu
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Prb: Lista se me cambia de valor dentro de una

Publicado por ^whippersnapper^ (2 intervenciones) el 30/09/2007 07:31:49
Es primera vez que entro acá, quizás hayas resuelto el problema, pero bueno, es mejor tarde que nunca, cuando vas a hacer una copia de objetos, te recomiendo que uses el módulo copy, cuando realizas esto:

self.nodoin = nodoentrada

Bien puedes usarlo de este modo y no se cambia el valor de "b":

self.nodoin = copy.deepcopy(nodoentrada)

Salu2x
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar