python不可变性和可变性的区别
来源:互联网 发布:网站信息采集到数据库 编辑:程序博客网 时间:2024/05/29 02:47
Python中的元组是一种类似于列表的容器类型,但列表是可变的而元组不可变。元组本身是不可变的,但是它所包含的元素的可变性取决于该元素的属性。如:t = (17, 'Jesse', ('LinuxKernel', 'Python'), [17, 'Jesse'])元组t中的元素数字17和字符串‘Jesse’以及元组('LinuxKernel', 'Python')本身属于不可变元素,故其在元组中不可更新;但是其中包含的列表[17, 'Jesse']本身属于可变元素,故:>>> t = (17, 'Jesse', ('LinuxKernel', 'Python'), [17, 'Jesse'])>>> t(17, 'Jesse', ('LinuxKernel', 'Python'), [17, 'Jesse'])>>> t[0] = 18Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: 'tuple' object does not support item assignment>>> t[3][17, 'Jesse']>>> t[3][0] = 21>>> t(17, 'Jesse', ('LinuxKernel', 'Python'), [21, 'Jesse'])由于元组的不可变性,所以它也没有列表的一些能改变自身的方法,如sort或reverse等(元组中的元素根据其本身属性可能有)。列表的一些属性和方法:>>> dir(list)['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']元组的一些属性和方法:>>> dir(tuple)['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index']通过比较两者的属性和方法,可以验证上一结论。虽然列表与元组有些不同,但是它们还是有很多相似的地方:1. 创建方法类似:创建一个列表:l = [123, 'abc' , (1, 2, 3)]创建一个元组:t = (123, 'abc', (1, 2, 3))2. 都支持下标操作:>>> l[1]'abc'>>> t[1]'abc'3. 都支持切片操作:>>> l[0:-1][123, 'abc']>>> t[0:-1](123, 'abc')4. 支持重复操作:>>> l * 2[123, 'abc', (1, 2, 3), 123, 'abc', (1, 2, 3)]>>> t * 2(123, 'abc', (1, 2, 3), 123, 'abc', (1, 2, 3))5. 支持连接操作(当然只能由同类型连接):>>> l + [3, 7, 6][123, 'abc', (1, 2, 3), 3, 7, 6]>>> t + (3, 7, 6)(123, 'abc', (1, 2, 3), 3, 7, 6)6. 还有拷贝,比较,成员关系操作等等
阅读全文
0 0
- python不可变性和可变性的区别
- python中数据类型(对象)的可变和不可变性
- python中的可哈希和不可改变性
- 字符串的相等性和不可变性
- String 的相等性和不可变性
- 字符串的不可变性
- String的不可变性
- String的不可变性
- String的不可变性
- String的不可变性
- 字符串的不可变性
- python(哈希性hashable和不可改变性imutable)
- python对象的引用特征和可变性
- String 的共享行和不可变性的理解.
- Java中String类型的不可变性和驻留池
- EffectiveJava(15)强化对象和域的不可变性
- C# 字符串的不可变性
- String类的不可变性
- NV操作实验
- HASHMAP源码阅读分析
- HTML5地理定位
- IP地址分类
- 20170710总结
- python不可变性和可变性的区别
- CentOS7下配置JDK
- C/C++调试笔记:空指针报错The inferior stopped because it received a signal from the operating system.
- react知识(一)React.createClass Vs React.Component
- 防火墙规则设置
- datepicker 日期控件的js校验(version-input.jsp)
- 数据库单表查询超时,重建索引失败。
- Java实现怎样hashcode
- python高级特性与高阶函数