当我在列表上使用sort()
方法时,它将永久影响列表:
>>> numbers
[3, 1, 2]
>>> numbers.sort()
>>> numbers
[1, 2, 3]
>>>
例如,当我在字符串上使用strip()
方法时,它不会永久影响字符串:
>>> string
' foo '
>>> string.strip()
'foo'
>>> string
' foo '
>>>
为什么会这样?它是否仅取决于该方法的构建方式?
答案 0 :(得分:2)
它仅取决于方法的构建方式吗?
我想您可以说“是”,但是就地方法(具有“永久”更改的方法)通常在列表中的mutable
对象上找到。
可变对象可以在其生命周期内更改其值,这意味着在调用这些方法时,返回新对象没有任何意义。
另一方面,返回新对象的方法用于不可变对象。不可变表示对象具有固定值,无法更改。因此,就地方法无法正常工作,因为它们需要更改对象的值,而这对于不可变的对象是不可能的。这就是为什么这些方法返回一个新对象的原因,通常可以将其分配回其最初绑定的名称,从而产生可变性的效果。