es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La ubicación de memoria de `str` no cambia después de la concatenación, ¿no desafía esto la inmutabilidad de `str` en Python?

He notado que cuando se concatenan cadenas en Python, a veces el id() de la variable no cambia, lo que significa que el objeto str ha cambiado.

Permítanme explicarlo:

>>> a = 'a'
>>> id(a)
2844964047152
>>> a+='b'
>>> id(a)
2844971374576
>>> a+='c'
>>> id(a)
2844971374576

Al principio, a es (…152) y al concatenar ‘b’ se crea un nuevo objeto ‘ab’ (…576) al que a hará referencia. Este es el comportamiento esperado.

Pero luego, ¿al concatenar ‘c’ se cambia el mismo objeto (“…576”) a ‘abc’?

Agradecería mucho si alguien pudiera explicar esto.

Edición:
esta pregunta fue marcada como duplicada de https://stackoverflow.com/questions/9097994/arent-python-strings-immutable-then-why-does-a-b-work aunque es completamente diferente.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Este comportamiento es el resultado de cómo se manejan las cadenas de texto en Python. Las cadenas de texto son objetos inmutables en Python, lo que significa que no se pueden cambiar sus valores. Sin embargo, al concatenar cadenas de texto usando el operador +=, Python crea un nuevo objeto de cadena de texto que es la concatenación de la cadena original y la nueva cadena. Este nuevo objeto de cadena de texto se asigna a la variable.

    En el ejemplo anterior, a comienza haciendo referencia al objeto de cadena de texto “a”. Cuando se concatena “b” a “a”, se crea un nuevo objeto de cadena de texto “ab” y se asigna a a. La función id() devuelve un identificador único para el objeto, por lo que el id() de a cambia para reflejar el nuevo objeto.

    No obstante, cuando se concatena “c” a “ab”, Python primero crea un nuevo objeto de cadena de texto “abc”. Sin embargo, como el nuevo objeto tiene el mismo valor que el objeto anterior, Python optimiza el código reutilizando el objeto existente en lugar de crear uno nuevo. Por lo tanto, el id() de a permanece igual.

    Este comportamiento puede parecer confuso, pero es el resultado de las estrategias de optimización de Python para la gestión de la memoria. También destaca la importancia de entender la inmutabilidad de los objetos en Python al trabajar con ellos.

Comments are closed.