Python 里 immutable和hashable的概念
2015-09-07 23:11
351 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/pilicurg/article/details/48276093
Python 里有两个紧密联系的概念: immutable和hashable. 都是描述一个对象的属性。
immutable
immutable指对象一经创建,即不可修改。对象是不是immutable取决于数据类型,比如整型(integer)、字符串(string)和元组(tuple)都是immutable,而列表(list)、字典(dictionary)、集合(set)都是mutable。这种不可修改体现在:
字符串不能原位(in-place)修改,而list可以:
>>> string = 'Hello' >>> string[3:] = 'a' Traceback (most recent call last): File "", line 1, in string[3:]='a' TypeError: 'str' object does not support item assignment >>> >>> lst=[1,2,3,4] >>> lst[2:] = [1] >>> lst [1, 2, 1]
tuple没有方法,而list有很多
>>> tpl = (1, 2, 3) >>> tpl.remove(1) Traceback (most recent call last): File "", line 1, in tpl.remove(1) AttributeError: 'tuple' object has no attribute 'remove' >>> >>> tpl.append(1) Traceback (most recent call last): File "", line 1, in tpl.append(1) AttributeError: 'tuple' object has no attribute 'append' >>> >>> lst = [1, 2, 3] >>> lst.remove(3) >>> lst [1, 2] >>> lst.append(3) >>> lst [1, 2, 3]
于是,immutable的对象可以作为一个固定不变的对象,适合作为哈希表的索引,因而它们是hashable的。
hashable
哈希表是在一个关键字和一个较大的数据之间建立映射的表,能使对一个数据序列的访问过程更加迅速有效。用作查询的关键字必须唯一且固定不变,于是只有immutable的对象才可以作为关键字,也叫hashable.
如上所述,整型(integer)、字符串(string)和元组(tuple)都可以作为关键字,而list不可以。
>>> dct = {1:2, 'Ben':123, (1,2,3):456} >>> dct = {1:2, 'Ben':123, [1,2,3]:456} Traceback (most recent call last): File "", line 1, in dct = {1:2, 'Ben':123, [1,2,3]:456} TypeError: unhashable type: 'list'
immutable与unchangable
tuple是immutable的,即使它包含一个mutable的元素后,仍然可以认为tuple是immutable的,因为他作为一个容器,里面包含对象并没有变化。
>>> t = ([1, 2, 3], 4, 5) >>> t[0][0] = 0 >>> t ([0, 2, 3], 4, 5) >>> t[0] = 0 Traceback (most recent call last): File "", line 1, in t[0] = 0 TypeError: 'tuple' object does not support item assignment
原文链接:http://www.lfhacks.com/tech/immutable-hashable-in-python
相关文章推荐
- Python 里 immutable和hashable的概念
- python-对象之hashable&unhashable与immutable&mutable
- python-对象之hashable&unhashable与immutable&mutable
- Python的面向对象、Class 概念与使用
- Python类型转换+序列操作+基本概念辨析速查手册
- Python概念-定制自己的数据类型(包装)
- Python闭包的概念、形式与应用
- python学习笔记【一】--基本概念
- Python中的可改写类型与不可改写类型 (mutable and immutable types in python)
- 【Python笔记】Python的几个高级语法概念浅析:lambda表达式 && 闭包 && 装饰器
- Python笔记一 基础概念与基础认识
- python多线程中锁的概念
- Python基本概念
- 初步讲解Python中的元组概念
- Python:认识群集结构(概念)
- python中的变量概念及算术运算
- SVM基本概念及Python实现代码
- Python菜鸟之路:Python基础-类(1)——概念
- 决策树与随机森林相关概念及其Python实现
- Python之numpy教程(一):基础概念