Tener un vistazo a este código Python:¿Cómo hacer una copia completamente no compartida de una lista complicada? (Copia en profundidad no es suficiente)
a = [1, 2, 3]
b = [4, 5, 6]
c = [[a, b], [b, a]] # [[[1, 2, 3], [4, 5, 6]], [[4, 5, 6], [1, 2, 3]]]
c[0][0].append(99) # [[[1, 2, 3, 99], [4, 5, 6]], [[4, 5, 6], [1, 2, 3, 99]]]
Observe cómo modificar un elemento de c
modifica que en todas partes. Es decir, si se agrega 99
al c[0][0]
, también se agrega al c[1][1]
. Supongo que esto se debe a que Python está hábilmente refiriéndose al mismo objeto para c[0][0]
y c[1][1]
. (Esa es su id() es lo mismo).
Pregunta: ¿Hay algo que se pueda hacer a c
de manera que sus elementos de la lista pueden ser modificados de manera segura a nivel local? Más arriba es solo un ejemplo, mi problema real tiene una lista mucho más complicada, pero tiene un problema similar.
(.. Lo siento por la pregunta mal formada por encima de los gurús de Python favor no dude en modificar la pregunta o etiquetas para expresar mejor esta consulta)
Cuando llegue media hora, es posible que desee estudiar Python's Data Model: http://docs.python.org/reference/datamodel.html – Triptych
Tríptico: Gracias por la sugerencia. Lo haré este fin de semana :-) –