Skip to content
question

ayuda xq mi lista original cambia si modifiqué la copia?? (es tarea, lo admito)

Emiliano Cruz@emiliano_06

October 18, 2026 · 1 min read

q onda, es para una tarea de estructuras de datos, no quiero q me la hagan solo entender q pasa jsjsjs

matriz = [[0, 0], [0, 0]]
copia = matriz
copia[0][0] = 5
print(matriz)  # [[5, 0], [0, 0]] ??????

despues lei q se usa .copy() y lo cambie:

copia = matriz.copy()
copia[0][0] = 5
print(matriz)  # [[5, 0], [0, 0]] OTRA VEZ alv

xq pasa esto si ya use copy?? el profe dijo algo de "referencias" pero no le entendi

Accepted answer

Luis Treviño#8 in Código en Español5 likes

jaja bienvenido al club, a todos nos pasó wey. Va explicado: En Python las variables son etiquetas que apuntan a objetos, no cajas. Cuando haces copia = matriz, las dos etiquetas apuntan a LA MISMA lista. Con matriz.copy() sí creas una lista nueva... pero es una copia superficial (shallow): la lista de afuera es nueva, pero adentro sigue teniendo LAS MISMAS listas internas. Entonces copia[0] y matriz[0] son el mismo objeto. Puedes comprobarlo: print(copia is matriz) # False print(copia[0] is matriz[0]) # True, aquí está el problema Soluciones: import copy copia = copy.deepcopy(matriz) o para una matriz de números: copia = [fila.copy() for fila in matriz] Y ojo con esta trampa que sale en exámenes: matriz = [[0] * 2] * 2 también crea dos filas que son la misma lista. Mejor [[0] * 2 for _ in range(2)].

View in the thread

Get the best of #codigo_en_espanol weekly

One email each Monday with the most useful posts. No spam; unsubscribe in one click.

Comments

8

Sign in to join the conversation.

Sign in to comment

Accepted answer

Luis Treviño@luis_qa_mty#8 in Código en Español
jaja bienvenido al club, a todos nos pasó wey. Va explicado: En Python las variables son etiquetas que apuntan a objetos, no cajas. Cuando haces copia = matriz, las dos etiquetas apuntan a LA MISMA lista. Con matriz.copy() sí creas una lista nueva... pero es una copia superficial (shallow): la lista de afuera es nueva, pero adentro sigue teniendo LAS MISMAS listas internas. Entonces copia[0] y matriz[0] son el mismo objeto. Puedes comprobarlo: print(copia is matriz) # False print(copia[0] is matriz[0]) # True, aquí está el problema Soluciones: import copy copia = copy.deepcopy(matriz) o para una matriz de números: copia = [fila.copy() for fila in matriz] Y ojo con esta trampa que sale en exámenes: matriz = [[0] * 2] * 2 también crea dos filas que son la misma lista. Mejor [[0] * 2 for _ in range(2)].
5 net votes
Emiliano Cruz@emiliano_06#9 in Código en Español
NO MANCHES ya entendi!! lo de 'etiquetas no cajas' me hizo click. y lo de [[0]*2]*2 justo lo tenia en otro ejercicio jsjsjs gracias luis
0 net votes
Sofía Ramírez@sofi_dev_mx#1 in Código en Español
Qué buena explicación Luis 💜 Emi, el is para comprobar si dos cosas son el mismo objeto te va a servir muchísimo para debuggear. Y qué bien que dices que es tarea, así da gusto ayudar
1 net votes
Emiliano Cruz@emiliano_06#9 in Código en Español
gracias sofi!! oye y una pregunta q no tiene q ver, tu crees q algun dia pueda ganar en dolares como tu? voy en 3er semestre y todavia no se ingles bien
0 net votes
Sofía Ramírez@sofi_dev_mx#1 in Código en Español
Claro que sí Emi! yo en 3er semestre tampoco sabía inglés jaja. Termina bien la carrera, practica inglés 20 minutos diarios (series con subtítulos en inglés cuentan) y haz proyectos. Cuando vayas en 6to platicamos del CV 💜
2 net votes
Rosa Quispe@rosa_aprende#7 in Código en Español
Gracias por preguntar Emi, yo tampoco sabía lo de deepcopy. Ya lo anoté en mi cuaderno pe 😊
4 net votes
Emiliano Cruz@emiliano_06#9 in Código en Español
rosa ya somos 2 aprendiendo jsjs seguimos con el hilo de estudio el sabado?
0 net votes
Núria Puig@nuria_data3 rep in Código en Español
Bon dia! Data scientist here: the same bug happens with pandas. df2 = df is the same object, use df.copy() instead. Molt bona pregunta 😊
0 net votes