一、深浅copy(*)(相对底层原理)
#默认情况下都是浅copy
""" #遍历:所有取一遍
l1 = [111,222,[333,444]] #所有可以被for循环遍历的类型都可以传给list然后转换成列表
l2 = l1.copy()
l3 = l1[:]
#print(id(l1[0]),id(l1[1]),id(l1[2]))
#print(id(l2[0]),id(l2[1]),id(l2[2]))
#l1[2][0] = 666
l1[0] = 777
print(l1)
print(l2)
man = ["上海",[100,]]
woman = man.copy()
man[1][0] -= 30
print(man)
print(woman)
"""
当直接改变原变量的不可变类型的元素,对浅拷贝无影响
当直接改变原变量的可变类型的元素,对浅拷贝有影响
#2、深copy
from copy import deepcopy
l1 = [111,222,[333,444]]
l2 = deepcopy(l1)
print(id(l1[0]),id(l1[1]),id(l1[2]))
print(id(l2[0]),id(l2[1]),id(l2[2]))
l1[2][0] = 666
print(l1)
print(l2)
#l1[0] = 777
#print(l1)
深拷贝每一层都拷贝
每层拷贝又分两种情况
遇到索引为可变类型 创建新的
遇到索引为不可变类型 原封不动拿下来
在当前层再无发现可变类型了,结束拷贝
二、集合类型(一种不常用数据类型)
#======set基本使用===========
1、用途:
(1)关系运算
(2)去重
#pythons = ["egon",'lxx',"张全蛋","李铁蛋",'刘金蛋',"赵银弹"]
#linuxs = ['lili','jack','egon','lxx','tom','kkk']
#l = []
#for stu in pythons:
#if stu in linuxs:
l.append(stu)
#print(l)
#2、定义方式: 在{}内用逗号分割开多个元素,需要注意的是集合的元素必须满足
#1、集合的元素必须是不可变类型
#2、集合的元素无序
#3、集合的元素没有重复
#s = {}
#print(type(s)) # 空字典
#s = set() # 定义空集合
#s = {1,'a',2,'b',3,'b','b','b'} # s=set({1,2,3})
#print(type(s))
#print(s)
#set数据类型转换
#res = set("hello")
#res = set([111,222,333,111,[666,777]])
#print(res)
#3、常用操作+内置的方法
#3.1 去重
student = [
{"name":"egon1","age":18,"gender":'male'}
{"name":"egon2","age":19,"gender":'female'},
{"name":"egon3","age":17,"gender":'female'},
{"name":"egon1","age":18,"gender":'male'},
{"name":"egon1","age":18,"gender":'male'},
]
#new_l = []
#for info in student:
#if info not in new_l:
#new_l.append(info)
#print(new_l)
pythons = {"egon",'lxx',"张全蛋","李铁蛋",'刘金蛋',"赵银弹"}
linuxs = {'lili','jack','egon','lxx','tom','kkk'}
##(1)交集:求既报名pyton又报名linux的学员姓名
#print(pythons & linuxs)
#print(pythons.intersection(linuxs)) #intersection:交叉 ; section:部分,截面
##(2)并集:求所有学生姓名
#print(pythons | linuxs)
#print(pythons.union(linuxs))
#(3)差集: 求只报名python的学员姓名
#print(pythons - linuxs)
#print(pythons.difference(linuxs))
#print(linuxs - pythons)
#(4)对称差集:求没有同时报名两门课程的学员
#res = (pythons - linuxs) | (linuxs - pythons)
#res = pythons ^ linuxs
#print(res)
res = pythons.symmetric_difference(linuxs) #symmetric:对称的,匀称的
print(res)
#(5) 父子集:父子指的包含与被包含的关系
#父集:>=
#子集:<=
#s1 = {1,2,3}
#s2 = {1,2}
#print(s1 >= s2) # >=等同于.issuperset
#print(s1.issuperset(s2))
#print(s2 <= s1) # <=等同于.issubset
#print(s2.issubset(s1))
#s1 = {1,2,3}
#s2 = {1,2,4}
#print(s1 > s2)
#print(s1 < s2)
#s1 = {1,2,3}
#s2 = {1,3,2}
#print(s1 == s2)
#s1 >= s2
#了解的内置方法
s1 = {'a',1,2,3}
#res = s1.pop() #随机删一个
#res = s1.remove(2) #指定删,无返回值
#s1.remove(4) 删除不存在元素会报错
s1.discard(2) 删除不存在元素并不会报错
#print(s1)
#print(res)
#s1.add(4) #一次加一个
#s1.update({4,5,6,3}) #再传一个集合进去
#s1 = s1.difference({3,4,5})
#s1.difference_update({3,4,5})
#print(s1.isdisjoint({3,4,5,6})) #无交集为真
#print(s1)
s1 = {111,222,333,444,555}
for x in s1:
print(x)
#================该类型总结====================================
#存多个值 #无法取某个值
#无序
#set集合可变,frozenset不可变集合
#s1 = {1,2,3}
#print(id(s1))
#s1.add(4)
#print(id(s1))
#s2 = frozenset({1,2,3})
#print(type(s2))

©著作权归作者所有:来自51CTO博客作者六个橘子的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Redis常用数据类型
  2. Kubernetes客户端和管理界面大集合
  3. java集合【7】——— iterator和Iterable异同详解
  4. python集合类型实例
  5. 集合类HashMap,HashTable,ConcurrentHashMap区别?
  6. 【redis】有关redis面试那些事(一)
  7. Awesome Go!高玩Gopher都会参考的Go资源集合
  8. 数据结构与算法专题——第五题 并查集
  9. foreach 集合又抛经典异常了,这次一定要刨根问底

随机推荐

  1. Android部分控件的特殊属性
  2. 控件(1)spinner
  3. EditText输入限制相关
  4. push研究――Apache Mina探索初步
  5. Android/OPhone ListView中如何使用Butto
  6. Android(安卓)之使用ContentProvider(内容
  7. 【转】Android深入探究笔记之三 -- Inten
  8. 【学习笔记】Android常用布局
  9. android 8.1 修改禁止状态栏下拉
  10. Android关于Task的一些实践之SingleTask,