一. 基础数据部分的补充
1. join: 把列表中的数据进行拼接,拼接成字符串

lit = ['alex','wusir','ritian','taiabai'] s = "_".join(lit) #把列表拼接起来, split()相反 print(s) #效果一样 # s = '' # for i in lit: # s += i + '_' # print(s.strip("_"))
2. 关于删除
列表和字典循环的时候都不能删除

1 ls = [1,2,3,4] 2 # ls.clear()#清空列表 3 # print(ls) 4 5 for i in ls: 6 ls.remove(i) 7 print(ls)#删除不彻底,因为每次删除都会导致元素的移动,每次更新一次索引
把要删除的内容保存到新列表中,循环新列表,删除旧列表(字典)

1 ls = [1,2,3,4] 2 new_li = [] 3 for i in ls: 4 new_li.append(i) 5 # 循环新列表,删除原来的列表 6 for c in new_li:#不会导致循环的列表的元素移动问题 7 ls.remove(c)#,删除的是老列表 8 print(ls)
3. fromkeys
dic.fromkey(iter,value)
把可迭代对象进行迭代,和后面的value组成键值对返回新字典
1.返回新字典,不会改变原来的字典

1 dic = {} 2 new_dic = dic.fromkeys('x23','xxx') 3 print(dic) #打印原来的字典 4 print(new_dic)#新字典
2,字典中所有的value都是同一内容

1 dic = {'a':'1','b':'2','c':'3'} 2 d = dic.fromkeys('x12',[]) 3 print(d) 4 print(dic)
3. frozenset 可哈希的集合,不可变.
s = forzenset([ 1,2,3,4,5 ])
print(id(s))
二. set集合
set特点:无序不重复,内部元素必须可哈希(不可变)

1 s = {1,2,(3,4,5,6),'abc'}#本身可变,不可哈希,但是内部元素是不可变的 2 print(type(s)) 3 s.remove(2) #删除指定元素 4 s.add(66) #添加指定元素 5 s.pop() #随机删除元素,pop()不能指定删除 6 #集合不能修改,只能删除之后再添加 7 # list -> tuple 8 # set -> frozenset 9 print(s)
frozenset可哈希的集合,不可变

1 s = frozenset([1,2,3,4,5]) 2 print(type(s))#<class 'frozenset'> 3 for i in s: 4 print(i)
三. 深浅拷贝
' = ' 没有产生新对象都是内存地址的赋值

1 lst1 = ['孙悟空','贝吉塔'] 2 lst2 = lst1 3 lst1.append('短笛') 4 print(lst1) 5 print(lst2) 6 print(id(lst1),id(lst2))
浅拷贝copy(), [ : ] #拷贝第一层内容
优点:省内存
缺点:容易出现同一对象被多个变量所引用

1 lst1 = ['孙悟空','贝吉塔',['七龙珠']] 2 # lst2 = lst1[:] 3 # lst1.append('短笛') 4 # print(lst1,lst2) 5 # print(id(lst1),id(lst2)) 6 7 lst2 = lst1.copy() 8 # lst1.append('短笛') 9 lst1[2].append('短笛') 10 print(lst1,lst2) 11 print(id(lst1[2]),id(lst2[2]))
深拷贝
优点:完全拷贝一份
缺点:占内存
import copy
copy.deepcopy()深度拷贝,把对象内部的所有内容都拷贝一份

1 import copy 2 lst1 = ['孙悟空','贝吉塔','卡卡罗特',['七龙珠','战斗陀螺']] 3 lst2 = copy.deepcopy(lst1)#会把这个对象相关的内部信息全部复制一份 4 lst1[3].append('wqer') 5 print(lst1,lst2) 6 print(id(lst1),id(lst2))
共同点:作用创建对象 >>>>> 原型模式(设计模式)