Python中常用的内建序列类型主要有list,str和tuple。实际上,在Python中序列可以指任何Python中for循环运行机制探究以及可迭代对象、迭代器详解),只要该可迭代对象通过实现__getitem__()方法支持使用索引方式访问元素,且实现__len__()方法返回序列的长度。
尽管list,str和tuple支持的操作十分类似,但实际上其内部的实现区别很大,鉴于后续的数据结构和算法学习将大量使用这三种内建序列类型,因此很有必要对这三个序列类型的底层原理有一个较为深刻的理解。
一、计算机内部存储模型简介
1. 内存地址
为了能够准确的描述Python实现序列类型的方式,首先需要简单了解一下计算机的内存用以存储信息的方式:计算机以二进制位(bit)来表达信息,最小的信息存储单位是字节(byte),一个字节一般等于8位。
在计算机的内存中,以字节为单位的存储单元数量众多,为了能够快速地访问这些存储单元,计算机为这些内存单元进行了编号,这些编号即所谓的内存地址,因此可以通过如#2150或#2152来访问内存中的数据,且毫无疑问该基本操作的时间复杂度为O ( 1 ) O(1)O(1)。
2. 变量本质
在实际的计算机中,内存地址的编号一般很长,不便于人类记忆,因此一般的高级编程语言都支持给内存地址起一个别名,这个别名就是变量名,代表了内存地址,即变量名本质是内存地址的别名。
但是,对于Python需要特别注意的是,变量名虽然是内存地址的别名,但是对于语句a = 8,