Me puede estar faltando algo sobre el comportamiento previsto de la extensión de la lista, pero ¿por qué sucede lo siguiente?Extendiendo una lista de listas en Python?
x = [[],[]]
y = [[]] * 2
print x # [[],[]]
print y # [[],[]]
print x == y # True
x[0].extend([1])
y[0].extend([1])
print x # [[1],[]], which is what I'd expect
print y # [[1],[1]], wtf?
yo supongo que el operador *
está haciendo algo inesperado aquí, aunque no estoy muy seguro de qué. Parece que algo está sucediendo debajo del capó que hace que el x original y el y (antes de llamar a extender) no sean realmente iguales aunque el operador ==
y el repr
parezcan idénticos.
Solo me encontré con esto porque quería rellenar previamente una lista de listas vacías de un tamaño determinado en tiempo de ejecución, y luego me di cuenta de que no estaba funcionando de la manera que imaginaba. Puedo encontrar una mejor manera de hacer lo mismo, pero ahora tengo curiosidad de por qué esto no funcionó. Esto es Python 2.5.2 BTW - No tengo una versión más nueva instalada, así que si esto es un error, no estoy seguro de si ya está solucionado.
Estoy al tanto de lo que hace append, solo estaba inventando un ejemplo artificial por el bien de la pregunta. –