Foros del Web » Programando para Internet » Python »

Listas tridimensionales y sus copias, facil respuesta.

Estas en el tema de Listas tridimensionales y sus copias, facil respuesta. en el foro de Python en Foros del Web. Nota: no se me asusten, parece largo pero se lee en un momento. Gracias por ayudar. Tengo un problema que no se como solucionar. El ...
  #1 (permalink)  
Antiguo 30/06/2009, 17:54
 
Fecha de Ingreso: junio-2009
Mensajes: 2
Antigüedad: 15 años, 4 meses
Puntos: 0
Pregunta Listas tridimensionales y sus copias, facil respuesta.

Nota: no se me asusten, parece largo pero se lee en un momento. Gracias por ayudar.
Tengo un problema que no se como solucionar. El caso es que tengo una lista de tres dimensiones ( lista[][][] ), de la cual quiero hacer una copia y una modificación. Al final tiene que quedarme la lista original y la lista modificada. Bien. Que tengo? Pues el siguiente codigo para ilustrar mi problema:

Código python:
Ver original
  1. import copy
  2. #EJEMPLO 1, QUE FUNCIONA ( per no me sirve de nada )
  3. #Hecha la copia, si se cambia algun elemento de la lista no se modifica el original. Perfecto
  4. a=[]
  5. a =[1,2,3]
  6. b = copy.copy(a)
  7. b[0] = 'helloworld'
  8. print a
  9. print b
  10. #Resultado:
  11. #[1, 2, 3]
  12. #['helloworld', 2, 3]

Código python:
Ver original
  1. #EJEMPLO 2, QUE NO FUNCIONA
  2. #Creamos nuestro array tridimensional de prueba. Lo imprimimos. Hacemos la copia. Cambiamos algo y volvemos a imprimir. Y que tenemos? Pues tanto el array original como su copia MODIFICADOS.
  3. m=2
  4. count=0
  5. c = []
  6. for i in range(0,m):
  7.     b = []
  8.     for j in range(0,m):
  9.         a = []
  10.         for k in range(0,m):
  11.             a.append(count)
  12.             count+=1
  13.         b.append(a)
  14.     c.append(b)
  15.  
  16. print c
  17. d = copy.copy(c)
  18. d[0][0][0] = 'hello world'
  19. print c
  20. print d
  21.  
  22. #Resultado :(
  23. #[[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
  24. #[[['hello world', 1], [2, 3]], [[4, 5], [6, 7]]]    <<<< :S
  25. #[[['hello world', 1], [2, 3]], [[4, 5], [6, 7]]]   <<<<< :S

Alguna idea? Se acepta pulpo como animal de compañía. Gracias de antemano.

Última edición por AlvaroG; 01/07/2009 a las 14:20
  #2 (permalink)  
Antiguo 01/07/2009, 14:30
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Listas tridimensionales y sus copias, facil respuesta.

El problema es que copy no es lo suficientemente "profunda". Es decir, de un objeto copia su contenido, pero si parte de ese contenido es una referencia a otro objeto, lo copiado será la referencia y no el objeto.

Para que la copia tenga la "profundidad" que quieres, debes usar deepcopy

http://docs.python.org/library/copy.html


Saludos.
  #3 (permalink)  
Antiguo 29/01/2010, 09:40
 
Fecha de Ingreso: junio-2009
Mensajes: 2
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Listas tridimensionales y sus copias, facil respuesta.

Muchas gracias. Me sirvió su ayuda.
Me olvidé de agradecer tu respuesta, pero mejor tarde que nunca.

Saludos!
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:01.