>>> rows = [['']*5]*5
>>> rows
[['', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', '']]
>>> rows[0][0] = 'x'
Naturalmente, espero filas para convertirse en:¿Por qué usar el operador de multiplicación en la lista crea una lista de punteros?
[['x', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', ''], ['', '', '', '', '']]
En su lugar, me sale:
[['x', '', '', '', ''], ['x', '', '', '', ''], ['x', '', '', '', ''], ['x', '', '', '', ''], ['x', '', '', '', '']]
Parece que los elementos de la lista de filas son punteros a la misma edad [ ''] * 5 lista. ¿Por qué funciona de esta manera y es esta una característica de Python?
Como nota al margen, si creo lista por lista de sintaxis de comprensión, obtengo el "que funciona correctamente": 'rows = [['' for x in range (5)] for y in range (5) ] ' – xyzman
Esto también" funciona ":' rows = [[''] * 5 para y en el rango (5)] ' – xyzman