如何检查不变性

2024-04-18 01:28:22 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,有没有方法可以检查对象是不可变的还是可变的?在

likeisimmutable(a)将返回True,如果a是不可变的,则返回{}。在


Tags: 对象方法truelikeisimmutable
2条回答

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

看看这个question

答案是:

1) Keys must not be mutable, unless you have a user-defined class that is hashable but also mutable. That's all that's forced upon you. However, using a hashable, mutable object as a dict key might be a bad idea.

2) By not sharing values between the two dicts. It's OK to share the keys, because they must be immutable. Copying the dictionary, in the copy module sense, is definitely safe. Calling the dict constructor here works, too: b = dict(a). You could also use immutable values.

3) All built-in immutable types are hashable. All built-in mutable types are not hashable. For an object to be hashable, it must have the same hash over its entire lifetime, even if it is mutated.

4) Not that I'm aware of; I'm describing 2.x.

A type is mutable if it is not immutable. A type is immutable if it is a built-in immutable type: str, int, long, bool, float, tuple, and probably a couple others I'm forgetting. User-defined types are always mutable.

An object is mutable if it is not immutable. An object is immutable if it consists, recursively, of only immutable-typed sub-objects. Thus, a tuple of lists is mutable; you cannot replace the elements of the tuple, but you can modify them through the list interface, changing the overall data

这应该能回答你的问题

你想检查不变性还是散列性?如果要检查某些内容是否可哈希,请将其哈希:

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

哈希性通常是你想要的。如果你想检查某个东西是否是可变的,没有一般的测试。在

相关问题 更多 >

    热门问题