【问题标题】:Why some methods change the object permanently while others don't? [duplicate]为什么有些方法会永久更改对象而其他方法不会? [复制]
【发布时间】:2019-02-27 09:34:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python


    【解决方案1】:

    是否仅仅取决于方法是如何构建的?

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 2017-05-25
      • 2015-05-24
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 2013-05-06
      • 2015-12-09
      相关资源
      最近更新 更多