首页 > 解决方案 > 为什么有些方法会永久更改对象而其他方法不会?

问题描述

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

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

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

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

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

标签: python

解决方案


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

我猜你可能会说“是”,但是就地方法——那些具有“永久”变化的方法——通常可以在mutable诸如列表之类的对象上找到。

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

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


推荐阅读