一. 基础数据类型补充(坑人的点)
1.元组
tu1 = (1)
如果元组里只放一个元素,并且没有',',那么该‘元组’的数据类型与里面的元素的数据类型是一致的。
2.列表
1)l1 = [1,2,3]
l2 = ["alex",'wusir']
print(l1 + l2)
输出[1,2,3,"alex",'wusir']
得出结论:列表与列表之间可以相加
2)在循环一个列表时,如果对列表中的某些元素进行删除,那么此元素后面的所有元素就会向前进一位,他们的索引就会发生变化。
方法一:切片
方法二:取出列表重新写进一个新列表
方法三:反向取值
在循环一个列表时,最好不要对此列表进行改变大小的操作。
3.字典
1)fromkey(itemables,value)是一个创建字典的方式
格式:dict.fromkeys()
陷阱:这样形成的字典的一个值进行更改,那么字典内所有值都会随之更改,因为所对应的相同的值的内存空间都是一样的。
2)在循环一个字典时,不能对该字典大小进行改变。
二. 集合set
形式:set{}
要求里面的元素必须是不可变的数据类型;
里面的元素不重复(天然去重),无序。
主要用途:
1)去重
2)关系测试
1.创建
1)s = {1,2,3}
2)set({1,2,3})
3)面试必考:list去重
l1 = [1,1,1,2,3,4,4,5,5,5,6]
set1 = set(l1)
l1 = list(set1)
2.增
1)add(增加的元素)
2)update(迭代增)
3.删
1)remove(元素)
2)pop():随机删除
3)clear():清空集合
4)del set 内存删除集合
4.关系测试
1)交集:&和intersection()
2)并集:|和union()
3)反交集:^和symmetric_difference()
4)差集:-和difference()
5)子集:<和issubset()
6)超集:>和issuperset()
5.不可变的集合
frozenset(set)
三. 深浅copy
1)浅copy
s1 = [1,2,3,[222]]
s2 = s1.copy()
第一层在内存地址中是独立的,但是从第二层开始的之后的所有层数的内存地址指向的都是同一个内存地址
2)深copy
每一层的内存地址都是独立的。两个对象完全没有关系。
3)应用场景(面试会考)
完全独立的copy一份数据:与原数据没有关系,深copy。
如果一份数据(列表)第二层时,你想与原数据进行公用,浅copy
面试题:
l1 = [1,2,3,[11,22,33]]
l2 = l1[:]
l1.append(4)
l1[3].append(44)
print(l1,l2)
验证切片是浅copy