关于python:为什么有些方法会永久地更改对象,而有些方法却没有?

Why some methods change the object permanently while others don't?

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

当我在列表上使用sort()方法时,则会永久影响列表:

1
2
3
4
5
6
>>> numbers
[3, 1, 2]
>>> numbers.sort()
>>> numbers
[1, 2, 3]
>>>

另一方面,例如,当我对字符串使用strip()方法时,它不会永久影响字符串:

1
2
3
4
5
6
7
>>> string
' foo '
>>> string.strip()
'foo'
>>> string
' foo '
>>>

为什么会这样?它是否仅仅取决于方法是如何构建的?


Does it depend on simply how the method is built?

我想你可以说"是",但是就地方法——那些有"永久"变化的方法——通常在mutable对象上找到,比如list。

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

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