When you receive a string, you'll be sure that it stays the same. Suppose that you'd construct a Foo
as below with a string argument, and would then modify the string; then the Foo
's name would suddenly change:
class Foo(object):
def __init__(self, name):
self.name = name
name = "Hello"
foo = Foo(name)
name[0] = "J"
With mutable strings, you'd have to make copies all the time to prevent bad things from happening.
It also allows the convenience that a single character is no different from a string of length one, so all string operators apply to characters as well.
And lastly, if strings weren't immutable, you couldn't reliably use them as keys in a dict
, since their hash value might suddenly change.
As for programming with immutable strings, just get used to treating them the same way you treat numbers: as values, not as objects. Changing the first letter of name
would be
name = "J" + name[1:]
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…