[Python-es] Problema con listas duplicadas

Luis Garcia Merino lgmerino en yahoo.com
Vie Ago 5 09:53:18 CEST 2011



>De: Francesc Gispert Sanchez <francesc_gispert_11.12 en hotmail.com>
>Para: python-es en python.org
>Enviado: jue,4 agosto, 2011 19:15
>Asunto: [Python-es] Problema con listas duplicadas
>
>Hola, estoy aprendiendo a programar en Python y he intentado hacer una
>versión del juego de mesa 'Othello' sólo con texto. Pero mi problema
>esque la función que cambia las piezas blancas por negras y viceversa no
>funciona, y tras muchas horas probando cosas, me parece que el problema
>viene de la función que duplica la matriz (una lista de listas) que
>representa el tablero.
>
>Esto se puede observar gracias a lo que imprimen las líneas 164 y 165
>del archivo .py; concretamente la 165. Esta línea debería mostrar todo
>el rato el mismo tablero (lista) exacto, puesto que no hay nada dentro
>de la función 'giraFitxes' (giraFichas) que lo modifique. Pero éste va
>adoptando los mismos valores que el tablero provisional que utilizo para
>girar las fichas (el que imprime la línea 164). Por eso, deduzco que
>cuando creo un tablero provisional con la función
>'duplicaTauler' (duplicaTablero) no se crea una lista nueva, sino que la
>nueva variable es sólo otra referencia al tablero principal.
>
>Además de ésta forma de duplicar el tablero, lo he probado con la
>función descrita en 'http://challenges.qumax.org/?p=351', pero tampoco
>ha funcionado. También lo he intentado con un bucle que recorriera las
>filas y, dentro de éste, 'duplicado = tablero[fila][:]', pero no hay
>forma. Es muy probable que, además de esto, haya algún otro fallo en el
>código, pero si es así no me he percatado por culpa de éste que comento.
>
>Entonces, ¿cómo debería hacerlo para crear un tablero provisional con
>los mismos valores que el tablero original sin que, al modificarlo, se
>modifique también el original?
>
>
>El programa (las variables, los comentarios, etc.) está en catalán,
>espero que no sea una molestia; si lo es, os lo puedo traducir. No sé si
>es relevante, pero utilizo Python 2.6.7 en Debian Wheezy (testing).
>
>Muchas gracias por adelantado.
>
>
>Francesc Gispert


Buenos días,
para duplicar el tablero original puedes utilizar deepcopy del módulo copy:

http://www.python.org/doc//current/library/copy.html

Un saludo,

       Luis
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20110805/dd2bb0c1/attachment.html>


Más información sobre la lista de distribución Python-es