In python, is there any way to check if an object is immutable or mutable?
like isimmutable(a)
would return True
, if a
is immutable, else returns False
.
In python, is there any way to check if an object is immutable or mutable?
like isimmutable(a)
would return True
, if a
is immutable, else returns False
.
没有针对不变性的一般测试。只有当对象的任何方法都不能改变底层数据时,对象才是不可变的。
看看这个问题
答案说:
1) 键不能是可变的,除非您有一个用户定义的可散列但也是可变的类。这就是强加给你的一切。但是,使用可散列的可变对象作为 dict 键可能不是一个好主意。
2)通过不在两个字典之间共享值。可以共享密钥,因为它们必须是不可变的。在复制模块的意义上,复制字典绝对是安全的。在这里调用 dict 构造函数也可以:b = dict(a)。你也可以使用不可变的值。
3) 所有内置的不可变类型都是可散列的。所有内置的可变类型都不是可散列的。对于一个可散列的对象,它必须在其整个生命周期内具有相同的散列,即使它是变异的。
4)我不知道;我正在描述 2.x。
如果一个类型不是不可变的,那么它就是可变的。如果一个类型是内置的不可变类型,那么它就是不可变的:str、int、long、bool、float、tuple,可能还有几个我忘记了。用户定义的类型总是可变的。
如果一个对象不是不可变的,那么它就是可变的。如果一个对象递归地仅由不可变类型的子对象组成,则它是不可变的。因此,列表元组是可变的;元组的元素不能替换,但是可以通过列表界面修改,改变整体数据
那应该回答你的问题
你想检查不变性还是哈希性?如果你想检查某些东西是否是可散列的,散列它:
try:
hash(thing)
except TypeError:
print "It's unhashable."
else:
print "It's hashable."
Hashability 通常是你想要的。如果您想检查某些东西是否可变,则没有通用测试。