Python 为什么有些方法永久更改对象,而另一些方法不更改';T

Python 为什么有些方法永久更改对象,而另一些方法不更改';T,python,Python,当我对列表使用sort()方法时,is会永久影响列表: >>> numbers [3, 1, 2] >>> numbers.sort() >>> numbers [1, 2, 3] >>> >>> string ' foo ' >>> string.strip() 'foo' >>> string ' foo ' >>> 另一方面,例如,当我对字

当我对列表使用
sort()
方法时,is会永久影响列表:

>>> numbers
[3, 1, 2]
>>> numbers.sort()
>>> numbers
[1, 2, 3]
>>> 
>>> string
' foo '
>>> string.strip()
'foo'
>>> string
' foo '
>>> 
另一方面,例如,当我对字符串使用
strip()
方法时,它不会永久影响字符串:

>>> numbers
[3, 1, 2]
>>> numbers.sort()
>>> numbers
[1, 2, 3]
>>> 
>>> string
' foo '
>>> string.strip()
'foo'
>>> string
' foo '
>>> 
为什么会这样?它仅仅取决于方法的构建方式吗

它仅仅取决于方法的构建方式吗? 我想你可以说“是”,但就地方法——具有“永久”更改的方法——通常在
mutable
对象(如列表)上找到

可变对象可以在其生命周期内更改其值,这意味着在调用这些方法时返回新对象没有任何意义

另一方面,返回新对象的方法用于不可变对象。Immutable表示对象具有固定值且不能更改。因此,就地方法无法工作,因为它们需要改变对象的值,这对于不可变对象是不可能的。这就是为什么这些方法返回一个新对象的原因,这个对象通常被分配回它最初绑定到的名称,可以说,这产生了可变性的效果

它仅仅取决于方法的构建方式吗? 我想你可以说“是”,但就地方法——具有“永久”更改的方法——通常在
mutable
对象(如列表)上找到

可变对象可以在其生命周期内更改其值,这意味着在调用这些方法时返回新对象没有任何意义

另一方面,返回新对象的方法用于不可变对象。Immutable表示对象具有固定值且不能更改。因此,就地方法无法工作,因为它们需要改变对象的值,这对于不可变对象是不可能的。这就是为什么这些方法返回一个新对象的原因,这个对象通常被分配回它最初绑定到的名称,可以说,这产生了可变性的效果