为什么有些方法会永久更改对象,而另一些方法却不会呢?

时间:2018-09-23 19:54:54

标签: python

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

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

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

>>> string
' foo '
>>> string.strip()
'foo'
>>> string
' foo '
>>> 

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

1 个答案:

答案 0 :(得分:2)

  

它仅取决于方法的构建方式吗?

我想您可以说“是”,但是就地方法(具有“永久”更改的方法)通常在列表中的mutable对象上找到。

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

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