python学习五(基础知识)
python基础学习五
本章内容
- 列表深浅拷贝
- 集合
1.列表深浅拷贝
浅拷贝:数据半共享,浅拷贝只能拷贝最外层,修改内层则原列表和新列表都会变化,通过列表的内置方法copy就可以实现
s = [1, 'alex', 'alvin'] s2 = s.copy() print(s2)
拷贝出的列表s2和列表s结果一致: [1, 'alex', 'alvin']
s = [[1,2], 'alex', 'alvin'] s3 = s.copy() s3[0][1] = 3 s3[1] = "hzw" print(s3) print(s) 结果: [[1, 3], 'hzw', 'alvin'] [[1, 3], 'alex', 'alvin']
把列表s3中的元素1修改为'hzw'后,原列表并未受影响
将s3中第一个元素[1,2]中的2修改为'3'时,原列表中也跟着变了
原因:浅拷贝,只拷贝第一层,2层以上 都是拷贝元素的地址,参考下图

深拷贝:数据完全不共享,是指将原列表完全克隆一份新的,copy.deepcopy()方法来拷贝列表
h1 = ['h', 123,[15000,9000]] x1 = copy.deepcopy(h1) x1[0] = 'x' x1[1] = 666 h1[2][1] -= 1999 x1[2][1] -= 5000 print(h1) print(x1)
结果:
['h', 123, [15000, 7001]]
['x', 666, [15000, 4000]]
2.集合
集合是无序的,不可重复的数据集合,集合里面的每个元素必须是可哈希的(不可变的数据类型),但是集合是不可哈希的,所以集合做不了字典的键
作用: 1、去重
2、关系测试, 交集\差集\并集\反向(对称)差集
集合的创建方式:
1.通过set()创建集合,格式 :集合名字=set(对象)
2.通过{}创建
#集合创建 s = set('saaaa li') s1 = ['alvin', 'ee', 'alvin'] print(s) s2 = set(s1) print(s2) s3 = set([1,2,3,'qqqqq']) print(s3) a = set([1,2,3,4,5]) b = set([4,5,6,7,8]) #取交集 print(a.intersection(b)) print(a&b) #取并集 print(a.union(b)) print(a | b) #差集 print(a.difference(b)) print(a-b) print(b.difference(a)) print(b-a) #反向交集 print(a.symmetric_difference(b)) print(a^b) #父集,超集 print(a.issuperset(b)) print(a.issubset(b))

浙公网安备 33010602011771号