Foros del Web » Programando para Internet » Python »

Sobrescritura de una lista

Estas en el tema de Sobrescritura de una lista en el foro de Python en Foros del Web. Saludos, tengo un problema con un array, cuando lo guardo en una variable auxiliar i modifico esta variable, se me modifica el original, y no ...
  #1 (permalink)  
Antiguo 19/03/2013, 05:14
 
Fecha de Ingreso: marzo-2013
Mensajes: 1
Antigüedad: 11 años, 9 meses
Puntos: 0
Sobrescritura de una lista

Saludos, tengo un problema con un array, cuando lo guardo en una variable auxiliar i modifico esta variable, se me modifica el original, y no entiendo porqué. Aquí os dejo el código a ver si alguien me puede ayudar.
Código Python:
Ver original
  1. camiExp=llista[0]
  2. paradesOrigen=camiExp[0]
  3. contador=0
  4. llista.remove(camiExp)
  5. for i in llistaFi:    
  6.     parades=[]
  7.     parades=paradesOrigen
  8.     parades.insert(0,int(i[0]))
  9.    
  10.     costFi=i[1]+camiExp[1]
  11.     camiFi=[]
  12.     camiFi.append(parades)
  13.     camiFi.append(costFi)
  14.     llista.insert(contador,camiFi)
  15.     contador=contador+1

Última edición por razpeitia; 19/03/2013 a las 10:18
  #2 (permalink)  
Antiguo 19/03/2013, 10:21
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Sobrescritura de una lista

Estaría bien que explicaras el código, para que no tengamos que descifrarlo para entender cuál es el problema.

Si "a" es una variable que guarda una lista, lo siguiente hace que "b" apunte a la misma lista:

b = a

Por lo tanto, si hacemos

b[1] = "hola"

entonces a[1] también es "hola".

Para evitar esto, a y b deben apuntar a listas diferentes, por lo que debes hacer algo como

b = a[:]

que crea una copia de la lista a en b.
  #3 (permalink)  
Antiguo 19/03/2013, 10:40
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Sobrescritura de una lista

Si nos dieras los valores que tiene llista y llistaFi podríamos decirte por que cambia en esta caso.

De cualquier manera tu problema es que las listas son mutables y cada vez que asignas una lista a otra variable no hace una copia solamente mantiene una referencia.

Te recomiendo darle una leida a python idiomatico especialmente la parte `Otros lenguajes tienen "variables"` donde explica un poco sobre los nombres de variables, referencias, etc...

Otra cosa en tu codigo partes como
Código Python:
Ver original
  1. parades=[]
  2. parades=paradesOrigen
paredes=[] no tiene relevancia por automáticamente le asignas otro valor.

O en este otro pedazo.
Código Python:
Ver original
  1. camiFi=[]
  2. camiFi.append(parades)
  3. camiFi.append(costFi)

Como veo que no asignas mas cosas puedes hacer lo siguiente
Código Python:
Ver original
  1. camiFi = [parades, costFi]

Y por ultimo veo que tienes una variable contador, que la puedes sustituir con enumerate (También lo mencionan en python idiomatico).

Asi que en vez de hacer esto:
Código Python:
Ver original
  1. contador = 0
  2. for i in my_list:
  3.     ...
  4.     contador = contador + 1

Puedes hacer esto:
Código Python:
Ver original
  1. for contador, i in enumerate(my_list):
  2.     ...

Etiquetas: lista
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:30.