我对什么是不可变类型感到困惑。我知道 float
对象被认为是不可变的,以我书中的此类示例为例:
class RoundFloat(float):
def __new__(cls, val):
return float.__new__(cls, round(val, 2))
由于类结构/层次结构,这是否被认为是不可变的?,意思是 float
位于类的顶部并且是它自己的方法调用。类似于此类示例(即使我的书说 dict
是可变的):
class SortedKeyDict(dict):
def __new__(cls, val):
return dict.__new__(cls, val.clear())
而一些可变的东西在类中有方法,用这种类型的例子:
class SortedKeyDict_a(dict):
def example(self):
return self.keys()
另外,对于最后一个 class(SortedKeyDict_a)
,如果我将这种类型的集合传递给它:
d = (('zheng-cai', 67), ('hui-jun', 68),('xin-yi', 2))
不调用 example
方法,它返回一个字典。 SortedKeyDict
和 __new__
将其标记为错误。我尝试将整数传递给 RoundFloat
类 __new__
并且它没有标记错误。
原文由 user1027217 发布,翻译遵循 CC BY-SA 4.0 许可协议
什么?浮动是不可变的?但我做不到吗
那不是“mut”x吗?
那么你同意字符串是不可变的吗?但是你可以做同样的事情。
变量的值发生变化,但它通过改变变量所指的内容而改变。可变类型可以那样改变, 也 可以“就地”改变。
这是不同之处。
具体例子