2010-11-19 10 views
5

Simplemente curiosidad por qué Python me permitirá actualizar un segmento de una lista, pero no una cadena?¿Por qué puedo actualizar un segmento de lista pero no un segmento de cadena en python?

>>> s = "abc" 
>>> s[1:2] 
'b' 
>>> s[1:3] 
'bc' 
>>> s[1:3] = "aa" 

>>> l = [1,2,3] 
>>> l[1:3] 
[2, 3] 
>>> l[1:3] = [9,0] 
>>> l 
[1, 9, 0] 

¿Hay una buena razón para esto? (Estoy seguro de que existe.)

+0

"¿Hay una buena razón para esto?" Sí. Las cadenas no son listas. En serio, esa es la razón. Ellos trabajan de manera diferente. –

Respuesta

5

Python distingue los tipos de datos mutables e inmutables. Hacer cadenas inmutables es una decisión de diseño general en Python. Los enteros son inmutables, no puede cambiar el valor de 42. Las cadenas también se consideran valores en Python, por lo que no puede cambiar "fourty-two" a otra cosa.

Esta decisión de diseño permite varias optimizaciones. Por ejemplo, si una operación de cadena no cambia el valor de una cadena, CPython generalmente simplemente devuelve la cadena original. Si las cadenas fueran mutables, siempre sería necesario hacer una copia.

9

Porque en python, las cadenas son immutable.

+0

+1. Esto es cierto en muchos lenguajes de programación (que proporcionan una implementación de cadenas) –

+0

Gran punto, me olvidé por completo de este aspecto de las cadenas de python. Perdón por perder el tiempo. – Chris

+0

No te culpes por ello. Además, podría ayudar al siguiente tipo que se topa con esta pregunta :) –

Cuestiones relacionadas