rnb*_*guy 8 python mutable immutability python-2.7 python-3.x
在python中,有没有办法检查对象是不可变还是可变?
喜欢isimmutable(a)会返回True,如果a是不可变的,则返回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."
Run Code Online (Sandbox Code Playgroud)
可哈希性通常是您想要的。如果您想检查某些东西是否可变,则没有通用测试。
| 归档时间: |
|
| 查看次数: |
4291 次 |
| 最近记录: |