Las cadenas en Python son inmutables, al igual que los números y las tuplas. Esto significa que puede crearlos, moverlos, pero no cambiarlos. Por qué esto es tan ? Por algunas razones (puede encontrar una mejor discusión en línea):
- Por diseño, las cadenas en Python se consideran elementales e inalterables. Esto estimula estilos de programación mejores y más seguros.
- La inmutabilidad de las cadenas tiene beneficios de eficiencia, principalmente en el área de menores requisitos de almacenamiento.
- También hace que las cadenas más seguro de usar como teclas de diccionario
Si nos fijamos en la web de Python un poco, usted notará que el consejo más frecuente de "cómo cambiar mi cadena" es "diseñar su código para que no tenga que cambiarlo ". Muy bien, pero ¿qué otras opciones hay? Éstos son algunos:
- name = name [: 2] + 'G' + name [3:] - esta es una forma ineficiente de hacer el trabajo. La semántica de corte de Python garantiza que esto funcione correctamente en todos los casos (siempre y cuando su índice esté dentro del rango), pero involucrando varias copias de cadenas y concatenaciones, no es la mejor opción para un código eficiente. Aunque si no te importa (y la mayoría de las veces es así), es una solución sólida.
- Utilice la clase MutableString del módulo UserString. Aunque no es más eficiente que el método anterior (realiza el mismo truco debajo del capó), es más consistente sintácticamente con el uso normal de cadenas.
- Use una lista en lugar de una cadena para almacenar datos mutables. Convierte de ida y vuelta usando la lista y únete. Dependiendo de lo que realmente necesite, ord y chr también pueden ser útiles.
- Use un objeto de matriz. Esta es quizás la mejor opción si usa la cadena para contener datos restringidos, como bytes "binarios", y quiere un código rápido.
un plagio de my own page en el entendimiento de Python :-)
¿Cómo es la segunda torpe? Parece describir muy claramente el resultado. Además, parece insertar un carácter en lugar de reemplazarlo (una función que no tiene el primer ejemplo). El primero se basa en algunas suposiciones sobre el estado "antes" y "después" de la cadena. –