12

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.

4

2 回答 2

7

没有针对不变性的一般测试。只有当对象的任何方法都不能改变底层数据时,对象才是不可变的。

看看这个问题

答案说:

1) 键不能是可变的,除非您有一个用户定义的可散列但也是可变的类。这就是强加给你的一切。但是,使用可散列的可变对象作为 dict 键可能不是一个好主意。

2)通过不在两个字典之间共享值。可以共享密钥,因为它们必须是不可变的。在复制模块的意义上,复制字典绝对是安全的。在这里调用 dict 构造函数也可以:b = dict(a)。你也可以使用不可变的值。

3) 所有内置的不可变类型都是可散列的。所有内置的可变类型都不是可散列的。对于一个可散列的对象,它必须在其整个生命周期内具有相同的散列,即使它是变异的。

4)我不知道;我正在描述 2.x。

如果一个类型不是不可变的,那么它就是可变的。如果一个类型是内置的不可变类型,那么它就是不可变的:str、int、long、bool、float、tuple,可能还有几个我忘记了。用户定义的类型总是可变的。

如果一个对象不是不可变的,那么它就是可变的。如果一个对象递归地仅由不可变类型的子对象组成,则它是不可变的。因此,列表元组是可变的;元组的元素不能替换,但是可以通过列表界面修改,改变整体数据

那应该回答你的问题

于 2013-07-26T07:19:33.007 回答
3

你想检查不变性还是哈希性?如果你想检查某些东西是否是可散列的,散列它:

try:
    hash(thing)
except TypeError:
    print "It's unhashable."
else:
    print "It's hashable."

Hashability 通常是你想要的。如果您想检查某些东西是否可变,则没有通用测试。

于 2013-07-26T07:24:07.870 回答