在讲今天的内容之前,让我们先来了解一下标准类型的可变和不可变。
- 不可变的数据类型:Number、String、Tuple
- 可变的数据类型:List、Dictionary、Set
Python采用的是基于值的内存管理方式,如果为不同变量赋值为相同值(仅适用于-5至256的整数和短字符串),这个值在内存中只有一份,多个变量指向同一块内存地址(即id)。
我就拿String和List举例子吧 ?
List是可变对象。
>>>alist = [3,4,5]
>>>id[alist]
44359928
>>>alist[1] = 6
>>>alist
[3,6,5]
>>>id(alist)
44359928
我们可以发现改变列表内容之后,内存地址并没有变。因为List是可变的,可以在原地修改。
String是不可变对象
>>> i = 4
>>> id(i)
1636290384
>>> i += 1
>>> id(i)
1636290416
*可以看到当字符串改变时,地址也会跟着改变。所以它是不可变的。
一、列表
- 本质:是一种有序的集合。
- 可以通过
dir(list)
和help(list)
查看列表的函数。
创建列表
#创建1
>>> AList = [];AList # 创建了一个空列表
[]
#创建2
>>> BList = list();BList
[]
#创建3
>>>list = [1,2,'good',True] # 注意:列表中的元素数据可以是不同类型的。
>>>print(list)
[1, 2, 'good', True]
添加
- 一个元素的添加:
>>> AList.append(1);AList
[1]
- 多个元素的添加:
>>> AList.extend([2,3]);AList
[1, 2, 3]
列表元素的插入(insert)
- 语法:L.insert(index, object)
>>> AList
[1, 2, 3]
>>> AList.insert(3,4)
>>> AList
[1, 2, 3, 4]
# 第3个位置插入元素'4'
弹出(pop)
- 语法:L.pop([index])
- pop后返回pop的值,同时原列表元素会发生改变
>>> AList
[1, 2, 3, 4]
>>> AList.pop(3)
4
>>> AList
[1, 2, 3]
索引 (index)
- 语法:L.index(value, [start, [stop]])
>>> AList
[1, 2, 3]
>>> AList.index(3)
2
删除(remove)
- 语法:L.remove(value)
>>> AList
[1, 2, 3]
>>> AList.remove(1)
>>> AList
[2, 3]
#与pop类似,但不会返回值
复制(copy)
- 语法:L.copy()
>>> AList
[1, 2, 3]
>>> CList = AList.copy()
>>> CList
[1, 2, 3]
>>> AList.remove(1)
>>> AList
[2, 3]
>>> CList
[1, 2, 3]
# 用copy复制过来的列表,不会受原列表的改变而影响
记数(count)
- 语法:L.count(value)
>>> DList = [1,1,2,3,4,5,1,2]
>>> DList
[1, 1, 2, 3, 4, 5, 1, 2]
>>> DList.count(1)
3
逆序排序(reverse)
- 语法:L.reverse()
>>> EList = [5,2,3,4,1]
>>> EList.reverse();EList
[1, 4, 3, 2, 5]
#逆序排序还可通过切片完成
>>> EList = [5,2,3,4,1]
>>> EList[::-1]
[1, 4, 3, 2, 5]
顺序排序(sort)
- 语法:L.sort(key=None, reverse=False)
#默认从小到大排序
>>> EList
[1, 4, 3, 2, 5]
>>> EList.sort();EList
[1, 2, 3, 4, 5]
清空(clear)
- 语法:L.clear()
>>> AList
[2, 3]
>>> AList.clear()
>>> AList
[]
二、元组
- 本质:是一种有序结合。
- 可以通过
dir(tuple)
和help(tuple)
查看列表的函数。
创建
元组()不是必须的,但是,是必须要有的
>>> a = (1,2,3)
>>> type(a)
<class 'tuple'>
>>> a = 1,
>>> type(a)
<class 'tuple'>
# 空元组的创建
>>> c = tuple()
>>> c
()
记数(count)
- 语法:T.count(value)
>>> tup1 = (1,2,4,2,2,3)
>>> tup1.count(2)
3
索引(index)
- 语法:T.index(value, [start, [stop]])
>>> tup1
(1, 2, 4, 2, 2, 3)
>>> tup1
(1, 2, 4, 2, 2, 3)
修改
#尽管元组时不可变的,但可以通过对元组进行组合来修改元组
>>> tup1
(1, 2, 4, 2, 2, 3)
>>> tup2 = ('a','b','v')
>>> tup3 = tup1 + tup2;tup3
(1, 2, 4, 2, 2, 3, 'a', 'b', 'v')
复制
元组可以通过*进行复制
>>> tup = 1,
>>> tup1 = tup * 3;tup1
(1, 1, 1)
删除
元组可以通过del删除
>>> tup1
(1, 1, 1)
>>> del tup1
>>> tup1
Traceback (most recent call last):
File "<pyshell#29>", line 1, in <module>
tup1
NameError: name 'tup1' is not defined
删除后再访问就会报错