1. 深浅拷贝
1.1 值拷贝
s1直接将ls中存放的地址拿过来
s1内部的值发生任何变化,s2都会随之变化
s1 = ['1','2','3','a']
s2 = s1
print(id(s1),id(s2)) # 1986703930376 1986703930376
s1[2] = 'b'
print(id(s1),id(s2)) # 1986703930376 1986703930376
1.2 浅拷贝
s2 = s1.copy()
新开辟列表空间,但列表中的地址都是直接从ls列表中拿来
s1内部的可变类型值发生改变,ls2会随之变化
s1 = ['1','2','3','a',['1','2']]
s2 = s1.copy()
s1[4][0] = 4
print(s1,id(s1)) # ['1', '2', '3', 'a', [4, '2']] 2143274411208
print(s2,id(s2)) # ['1', '2', '3', 'a', [4, '2']] 2143275228424
1.3 深拷贝
新开辟列表空间,s1列表中的不可变类型的地址直接拿过来,但是可变类型的地址一定重新开辟空间
from copy import deepcopy
s1 = ['1','2','3','a',['1','2']]
s2 = deepcopy(s1)
s1[4][0] = 4
print(s1) # ['1', '2', '3', 'a', [4, '2']]
print(s2) # ['1', '2', '3', 'a', ['1', '2']]
2. 元组类型
元组:可以理解为不可变的列表
1.值可以为任意类型
2.可以存放多个值 - 可以进行成员运算
3.可以存放重复的值 - 可以计算成员出现的次数
4.有序存储 - 可以通过索引取值,可以切片
2.1 元组的常用操作
2.1.1 索引取值
t = ('1','2','3','a')
print(t[0]) # 1
2.1.2 运算(拼接)
t1 = ('1','2','3','a')
t2 = (1,2,3)
print(t1 + t2) # ('1', '2', '3', 'a', 1, 2, 3)
2.1.3 长度
t1 = ('1','2','3','a')
print(len(t1)) # 4
2.1.4 切片
t1 = ('1','2','3','a')
print(t1[::-1]) # ('a', '3', '2', '1')
2.1.5 成员运算
t1 = ('1','2','3','a')
print('c' in t1) # False
2.1.6 for循环
t1 = ('1','2','3','a')
for k in t1:
print(k)
3. 字典类型
容器(集合):存放多个值的变量
单列容器(系统中的单列容器很多):list | tuple
双列容器(map):只有dict,存放数据 成对出现,dict存放数据采用 key-value键值对方式
字典中的key可以为什么类型:key必须为不可变类型
-- key是取value的唯一依据,key一旦被确定,就需要唯一确定(不能被改变)
字典中的value可以为什么类型:value可以为任意类型
-- value是用来存放世间所有存在的数据
key要确保唯一性,不能重复,值可以重复,并且可以被改变 => 字典为可变类型
3.1 字典的操作(增删改查)
3.1.1 增
dic = {'a':1,'b':2,'c':3}
dic['d'] = 4
print(dic) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}
3.1.2 改
dic = {'a':1,'b':2,'c':3}
dic['b'] = '4'
print(dic) # {'a': 1, 'b': '4', 'c': 3}
3.1.3 查
dic = {'a':1,'b':2,'c':3}
print(dic['c']) # 3
3.1.1 删
dic = {'a':1,'b':2,'c':3}
print(dic.pop('a')) # 1
print(dic) # {'b': 2, 'c': 3}
3.2 字典的其他方法
3.2.1 更新:
dic = {'a':1,'b':2,'c':3}
d = {'a':5,'d':10}
dic.update(d)
print(dic) # {'a': 5, 'b': 2, 'c': 3, 'd': 10}
3.2.2 带默认值的新增: 新增key,key已有,啥事不干,没有添加key,值就是第二个参数
dic = {'a':1,'b':2,'c':3}
dic.setdefault('x')
print(dic) # {'a': 1, 'b': 2, 'c': 3, 'x': None}
dic.setdefault('y',100)
print(dic) # {'a': 1, 'b': 2, 'c': 3, 'x': None, 'y': 100}
3.2.3 字典的循环
1.直接循环,就是循环得到key
dic = {'a':1,'b':2,'c':3}
for k in dic:
print(k,end=' ') # a b c
2.循环keys
dic = {'a':1,'b':2,'c':3}
for k in dic.keys():
print(k,end=' ') # a b c
3.循环values
dic = {'a':1,'b':2,'c':3}
print(dic.values()) # dict_values([1, 2, 3])
for k in dic.values():
print(k,end=' ') # 1 2 3
同时循环key和value (key, value)
dic = {'a':1,'b':2,'c':3}
print(dic.items()) # dict_items([('a', 1), ('b', 2), ('c', 3)])
a, b = (1, 2)
print(a, b) # 1 2
for res in dic.items():
print(res,end=' ') # ('a', 1) ('b', 2) ('c', 3)
重点:
dic = {'a':1,'b':2,'c':3}
for k,v in dic.items():
print(k,v) # a 1 b 2 c 3
4. 集合类型
4.1 概念:
概念:
1.set为可变类型 - 可增可删
2.set为去重存储 - set中不能存放重复数据
3.set为无序存储 - 不能索引取值
4.set为单列容器 - 没有取值的key
总结:set不能取值
4.2 集合的增删