可变(不可变)对象
当改变一个对象的值时,如果能维持其 id 值不变,我们就说这个对象是可变的,否则这个对象就是不可变的。
对于变量 x 来说,如果 id(x) 不随 x 的内容发生变化而变化,我们就说 x 是可变的;否则 x 就是不变的。
常见的可变对象有字典,列表,常见的不可变对象有数字,字符串,元组。
可哈希(不可哈希)对象
参考官方文档的解释:
如果一个对象在其生命周期内有一个固定不变的哈希值 (这需要__hash__()方法) 且可以与其他对象进行比较操作 (这需要__eq__()方法) ,那么这个对象就是可哈希对象 (hashable) 。可哈希对象必须有相同的哈希值才算作相等。
由于字典 (dict) 的键 (key) 和集合 (set) 内部使用到了哈希值,所以只有可哈希 (hashable) 对象才能被用作字典的键和集合的元素。
所有python内置的不可变对象都是可哈希的,同时,可变容器 (比如:列表 (list) 或者字典 (dict) ) 都是不可哈希的。用户自定义的类的实例默认情况下都是可哈希的;它们跟其它对象都不相等 (除了它们自己) ,它们的哈希值来自id()方法。
参考文章
作者:恢恢_b083
标题:聊一聊Python中的hashable和immutable
链接:https://www.jianshu.com/p/49f940b2c03e