day07 深浅拷贝
今日主要内容
1. 基础数据部分的补充
1. join: 把列表中的数据进行拼接。 拼接成字符串
lst = ["alex", "wusir", "ritian", "taibai"] s = '_'.join(lst) print(s)
2. 关于删除:
列表和字典在for循环的时候都不能删除。因为删除时,元素的索引会发生改变
把要删除的内容保存在新列表中。 循环新列表。 删除老列表(字典)
lst = ["王大锤", "王有才", "张小白", "刘大哥"] for el in lst: lst.remove(el) print(lst) #删除不彻底, 剩下['王有才', '刘大哥'] new_lst = [] #装要删除的内容
for el in lst: new_lst.append(el) #循环新列表的元素,对应找出原来列表的元素 for el in new_lst: lst.remove(el) #根据新列表的元素,删除老列表的元素 print(lst)
lst = ["王大锤", "王有才", "张小白", "刘大哥"] #删除姓王的 new_lst = [] for el in lst: if el.startswith('王'): new_lst.append(el) for el in new_lst: lst.remove(el) print(lst)
dic = {"jay":'周杰伦', "jj":"林俊杰 ", "jack": "莱昂纳多迪卡普里奥"} #清空字典 lst = [] #建立新的列表,把需要删除的内容保存 for k in dic: lst.append(k) for el in lst: dic.pop(el) print(dic)
3. fromkeys
dict.fromkeys(iterable, value)
把可迭代对象进行迭代。 和后面的value组合成键值对 返回新字典
d = dict.fromkeys("周杰伦", "王尼玛") print(d) {'周': '王尼玛', '杰': '王尼玛', '伦': '王尼玛'} #第一项iterable ,共享value
坑1: 返回新字典。不会改变原来的字典 fromkeys是一个staticmethod 静态方法
dic = {}
dic.fromkeys(xxx, xxx)
print(dic) # 结果是{}
d = dic.fromkeys(xxx, xxx) #这样创建的字典有内容
dic = {} # d = dic.fromkeys("周杰伦", "王尼玛") d = dict.fromkeys("周杰伦", "王尼玛") #或者 print(d) # {'周': '王尼玛', '杰': '王尼玛', '伦': '王尼玛'} dict.fromkeys("周杰伦", "王尼玛") print(dic) #{}
坑2: 你的value如果是可变的数据类型。 所有的key都可以改动这个数据。 一个改动, 所有的value都跟着改变
d = fromkeys(xxx.[])
字典中的所有的value都是同一个列表
d = dict.fromkeys('周杰伦', ['哇哈哈']) print(d) #{'周': ['哇哈哈'], '杰': ['哇哈哈'], '伦': ['哇哈哈']} d['周'].append('爽歪歪') print(d) #{'周': ['哇哈哈', '爽歪歪'], '杰': ['哇哈哈', '爽歪歪'], '伦': ['哇哈哈', '爽歪歪']}
2. set集合
特点:无序不重复。 内部元素必须可哈希(不可变数据类型)
lst = ["周杰伦", "周杰伦", "王力宏", "王力宏", "胡辣汤"] s = set(lst) print(s) #去重 {'王力宏', '周杰伦', '胡辣汤'} print(list(s)) # 转换为列列表 可以不用重新赋值变量
增删改查:
1. add() 添加 重复内容不会被添加
2.pop() 随机弹出一个
3.remove() 指定元素删除 ,如果元素不存在 报错
4.集合的数据没有索引 修改需要先删除后添加 即:先用.remove() 再.add()
5.for 循环 查询
常用操作
交集: s1.intersection(s2) 或者 s1 & s2
并集: s1.union(s2) 或者 s1 | s2
差集: s1.difference(s2) 或者 s1 - s2
反交集: s1.symmetric_difference(s2) 或者 s1 ^ s2
子集: s1.issubset(s2) 或者 s1 < s2
超集: s1.issupperset(s2) 或者 s1 > s2
3. 深浅拷贝(画图理解)
1. = 赋值操作没有创建新的对象。 此时 两个变量指向的是同一个内存地址
lst1 = ["孙悟空", "贝吉塔", "卡卡罗特"] lst2 = lst1 # 赋值 lst1.append("短笛") print(lst1) #['孙悟空', '贝吉塔', '卡卡罗特', '短笛'] print(lst2) #['孙悟空', '贝吉塔', '卡卡罗特', '短笛'] print(id(lst1), id(lst2)) #1046493921032 1046493921032
2. copy() 或者 [:] 浅拷贝。 拷贝第一层内容
3. 深拷贝
import copy
copy.deepcopy() 深度拷贝。 把对象内部的所有内容都拷贝一份
作用: 快速创建对象