关于python:为什么一个字符串需要一个赋值运算符来改变它,但列表不是?

Why does a string need an assignment operator to change it, but a list doesn't?

本问题已经有最佳答案,请猛点这里访问。

我不明白为什么在这个例子中,使用.lower()方法不会在没有赋值的情况下更改字符串,但是.reverse()方法会在没有赋值的情况下更改列表。某些数据类型是否需要赋值才能更改,而其他数据类型则不需要?为什么?谢谢。

1
2
3
4
5
6
7
8
a ="ABC"
a.lower()

b = [1, 2, 3]
b.reverse()

print(a)
print(b)


Do certain data types need assignment to change, and others don't?

对。

Why?

因为这是每种类型提供的API的一部分。

有些类型的对象(如列表)提供了改变其数据的方法(如list.reverse)。其他人不知道,这只是你需要知道的一部分,为了有效地使用一个类型。用Python的说法,允许这种变异的类型称为"可变"类型,而不允许这种变异的类型则称为"不可变"。

(从技术上讲,在上面的示例中,您永远不会"更改"字符串。相反,您可以创建一个新字符串,并将其分配给用于指向旧字符串的变量。这与列表示例中更改实际列表对象的重要方法不同。通过搜索可变对象和不可变对象的讨论,您可以找到许多关于差异的信息。)