python - 为什么有些方法会永久更改对象而其他方法不会?
问题描述
当我sort()
在列表上使用该方法时,会永久影响列表:
>>> numbers
[3, 1, 2]
>>> numbers.sort()
>>> numbers
[1, 2, 3]
>>>
另一方面,例如,当我strip()
在字符串上使用该方法时,它不会永久影响字符串:
>>> string
' foo '
>>> string.strip()
'foo'
>>> string
' foo '
>>>
为什么会这样?它是否仅取决于方法的构建方式?
解决方案
它是否仅取决于方法的构建方式?
我猜你可能会说“是”,但是就地方法——那些具有“永久”变化的方法——通常可以在mutable
诸如列表之类的对象上找到。
可变对象可以在其生命周期内更改其值,这意味着在调用这些方法时返回新对象没有任何意义。
另一方面,返回新对象的方法适用于不可变对象。不可变意味着对象具有固定值并且不能改变。因此,就地方法无法工作,因为它们需要更改对象的值,而这对于不可变对象是不可能的。这就是为什么这些方法返回一个新对象的原因,该对象通常被分配回它最初绑定的名称,从而产生可变性的效果,可以说。
推荐阅读
- c# - 任何永久解决方案这个错误“通过 http 下载,请考虑更新到 https”在 Unity 中?
- delphi - 如何从动态间隔的帧中编码实时视频?
- javascript - 等到 take 完成的操作不起作用(redux saga)
- action - 从谷歌操作发布谷歌助手应用程序时如何修复“未能提交操作模板”
- javascript - 如何使用js在按钮上启动特定的音频流
- mysql - 需要一个查询来从两个具有公共和不公共列的表中执行该表
- javascript - .text 不是函数 - jquery
- c# - 为什么 MongoDB 中的多个会话比一个会话快?
- laravel - Laravel "\Request::route()->getName()" 给出空结果
- automation - 在 Java 自动化期间,Blueprism 资源 pc 被自动终止