2010-11-19 32 views
5

Juste curieux plus que tout pourquoi python me permettra de mettre à jour une tranche d'une liste mais pas une chaîne?Pourquoi est-ce que je peux mettre à jour une tranche de liste mais pas une tranche de chaîne 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] 

Y a-t-il une bonne raison à cela? (Je suis sûr qu'il existe.)

+0

"Y at-il une bonne raison à cela?" Oui. Les chaînes ne sont pas des listes. Sérieusement, c'est la raison. Ils fonctionnent différemment. –

Répondre

5

Python distingue les types de données mutables et immuables. Rendre les chaînes immuables est une décision de conception générale en Python. Les entiers sont immuables, vous ne pouvez pas modifier la valeur de 42. Les chaînes sont également considérées valeurs en Python, donc vous ne pouvez pas changer "fourty-two" à autre chose.

Cette décision de conception permet plusieurs optimisations. Par exemple, si une opération de chaîne ne modifie pas la valeur d'une chaîne, CPython renvoie généralement simplement la chaîne d'origine. Si les chaînes étaient mutables, il serait toujours nécessaire de faire une copie.

9

Parce que dans Python, les chaînes sont immutable.

+0

+1. Cela est vrai dans beaucoup de langages de programmation (qui fournissent une implémentation de chaîne) –

+0

Bon point, j'ai complètement oublié cet aspect des chaînes python. Désolé de perdre du temps. – Chris

+0

Ne vous en moquez pas. De plus, il pourrait aider le prochain gars qui arrive à trébucher à travers cette question :) –