Una función recibe una lista y necesita trabajar con una versión modificada. Antes de seguir sus índices, conviene preguntar dónde vive cada versión. En Solidity, calldata y memory no son etiquetas decorativas para la misma lista.
Marca el momento de la copia
La documentación de Solidity describe calldata como una zona no persistente que no se puede modificar. Copiar sus datos a memory permite trabajar sobre otra representación durante la llamada. Ese cambio no convierte la entrada original en almacenamiento persistente del contrato.
Para una lectura de código, imagina que entran los valores 4, 7 y 9. Dibuja una caja llamada entrada y otra llamada copia. Cuando el código cambia el primer elemento de la copia a 5, anótalo solamente en la segunda caja. No afirmes que el estado del contrato cambió sin localizar una escritura al estado.
Tres preguntas para una revisión pequeña
¿La función necesita modificar la lista? ¿La copia se usa después o se descarta? ¿Algún resultado se devuelve o se guarda explícitamente? Estas preguntas separan el propósito de la operación de su coste y de sus efectos.
Si pruebas un ejemplo, usa un entorno local y una versión concreta del compilador. Comprueba también una lista vacía antes de acceder al primer elemento. El ejemplo 4, 7, 9 ilustra la ubicación de datos; no demuestra que una función arbitraria sea segura, eficiente ni correcta para cualquier entrada.
Ilustración editorial generada con IA; no es una fotografía documental.

