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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
## --------------- 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:

1
self.nodoin = nodoentrada

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

1
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