【发布时间】:2026-01-02 06:50:01
【问题描述】:
我对什么是不可变类型感到困惑。我知道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__ 将其标记为错误。我尝试使用__new__ 将整数传递给RoundFloat 类,它没有标记任何错误。
【问题讨论】:
-
您还可以查看List assignment with [:] 和python when to use copy.copy,我还回答了有关可变性的更多信息。
标签: python types immutability mutable