Python中的 set 与 深浅拷贝
字符串
join()
格式: "拼接的东西".join(可迭代对象)
可以加列表转换成字符串
1 lis = ['a','b','c','d'] 2 s = "//".join(lis) 3 print(s) 4 5 #结果 6 a//b//c//d
相反
split() 可以加字符串转换成列表 切割
列表和字典在循环的时候不能直接被删除
需要把要删除的内容记录在新的列表中
然后循环新列表,删除字典或列表
例如
lis = ['a','b','c','d','e'] for i in lis: lis.remove(i) print(lis) # 删除不完 lis1 = [] for i in lis: lis1.append(i) #创建新列表 for a in lis1: lis.remove(a) #删除旧列表 print(lis)
字典也同上
总结 : 字典和列表都不能在循环的时候进行删除, 字典在循环的时候不允许改变大小
集合
特点 : 无序的 不重复 元素必须可哈希(不可变)
作用 : 去重复
1 s = [1,2,3,1,3,4,5,3,5,6,1,77,78,1,8,3,5,6,9,9,99] 2 a = set(s) 3 print(a) #{1, 2, 3, 4, 5, 6, 99, 8, 9, 77, 78} 去重复
s = list(a)
本身是可变的数据类型, 有增删改查的操作
增 删
s = {'我','lx','你',} a = s.pop() #随机删除 a = s.add("他") #添加 s.remove('他') #删除 s.update("ndsad") #迭代添加 print(s)
frozensent() 冻结的集合
set 集合本身是可以改变的 是不可哈希的 我们可以使用frozenset来保存数据,
frozensent是不可改变的也就是一个可哈希的类型
深浅拷贝
重点
1 赋值 没有创建对象, 公用一个对象
2 浅拷贝,拷贝第一层内容,[:]或copy()
3 深拷贝, 拷贝所有内容包括内部所有 引入copy模块,deepcopy()
4 引用 import
1 import copy # 引用copy 模块 2 lst = ["赵云",'马可波罗','猴子','孙尚香','公孙离',["吕布",'干将','貂蝉']] 3 lst1 = lst[:] #浅拷贝 4 lst2 = lst.copy() #浅拷贝 5 lst3 = copy.deepcopy(lst) #深拷贝
重点
一个面试题
循环引用 官方文档有写
a = [1,2] a[1] = a print(a[1])