Python学习笔记:list,tuple和str

来源:互联网 发布:全国汽车保有量数据 编辑:程序博客网 时间:2024/05/16 05:12

本篇试图回答下面两个问题:
list,tuplestr的底层是怎么实现的?
它们之间有什么异同?

首先定义一下数组(array),这个数组跟其他语言说的数组不太一样,这个数组只是内存上的概念。数组是一片连续的内存块,可以在常数时间索引每个内存块。
list,tuplestr都属于sequencesequence底层都是用数组实现的。下面详细描述各个sequence

str:在Python中,字符串由单独的str类表示,每个字符由两字节内存表示。比如字符串“SAMPLE”就由一个12字节的、六个单位的数组表示。str是immutable,如果要“修改“一个字符串,Python会开辟一块新的内存储存修改后的字符串,然后把引用指向新的内存块。

listlist底层也是用数组实现,与str不同的是,list的数组储存的不是对象本身,而是对象的引用,这种数组叫做引用型结构(referential array)。也因为list是引用型数组,所以list可以存储任何对象。(实际上list存储的是引用)。每次创建一个新list对象,会分配比需要多一些的内存,以供list的增加(append,extend)之用。如果一个list对象的内存占满了还要继续增加,Python就会开辟一块新内存,然后把之前的复制过来,让引用指向新的内存。list是mutable的含义是其中每个元素的内容(引用)可以改变,这样对于单个元素的更改就不必像str一样开辟新内存。

tupletuple也是引用型数组,与list的不同是tuple是immutable。

参考文献:
Data Structures and Algorithms in Python, WILEY

0 0