学习视频地址:https://www.bilibili.com/video/BV1SE411N7Hi?p=38 作业地址:https://gitee.com/old_boy_education_python_28/teaching_plan/issues/I163NZ 以下内容仅供自己学习使用 #!/usr/bin/env python # -*- coding:utf-8 -*- # 1.有如下 v1 = {'郭宝元','alex','板哥','王二麻子'} v2 = {'alex','王二麻子'} # 请得到 v1 和 v2 的交集并输出 print(v1&v2) # 请得到 v1 和 v2 的并集并输出 print(v1|v2) # 请得到 v1 和 v2 的 差集并输出 print(v1-v2) # 请得到 v2 和 v1 的 差集并输出 print(v2-v1) # # 2.循环提示用户输入,如果输入的内容在v1中存在,则追加到v2中,如果v1中不存在,则添加到v1中。(如果输入N或n则停止循环) # v=input("enter,n or N to end:") # while v!='n' and v !='N': # if v in v1: # v2.add(v) # else: # v1.add(v) # print('v1:', v1) # print("v2:", v2) # v = input("enter,n or N to end:") # 3.is 和 == 的区别? #is是判断两边内存地址是否相同 #==是判断两边值是否相同 # 4.type和id的作用? #type输出类型 #id输出内存地址 # 5.看代码写结果并解释原因 # v1 = {'k1':'v1','k2':[1,2,3]} v2 = {'k1':'v1','k2':[1,2,3]} result1 = v1 == v2 result2 = v1 is v2 print(result1) print(result2) # True # False #值相同,内存地址不同 print("---------6") # 6.看代码写结果并解释原因 # v1 = {'k1':'v1','k2':[1,2,3]} v2 = v1 result1 = v1 == v2 result2 = v1 is v2 print(result1) print(result2) # True # True #v2=v1,将v2,v1指向同一个内存地址,所以两者内存地址相同,值也相同 print("-------7") # 7.看代码写结果并解释原因 # v1 = {'k1':'v1','k2':[1,2,3]} v2 = v1 v1['k1'] = 'meet' print(v2) #v2,v1指向同一个内存地址,所以当v1改变,v2也一起变 print("-------8") # 8.看代码写结果并解释原因 #python是内存地址引用,列表里面存的都是内存地址,不是真正的数据 v1 = '人生苦短,我用Python' v2 = [1,2,3,4,v1] v1 = "人生苦短,用毛线Python" print(v2) #[1, 2, 3, 4, '人生苦短,我用Python'] #"用python“开辟空间,v1指向了“用python”内存地址,v2中的元素5也指向了“用python”内存地址, # “用毛线python”开辟空间,后面v1重新指向了“用毛线python”开辟空间,v2指向不变,元素5还是指向“用python”空间 print("-------9") # 9.看代码写结果并解释原因 # info = [1,2,3] userinfo = {'account':info, 'num':info, 'money':info}#此处值还是内存地址 info.append(9) print(userinfo) info = "题怎么这么多" print(userinfo) # {'account': [1, 2, 3, 9], 'num': [1, 2, 3, 9], 'money': [1, 2, 3, 9]} # {'account': [1, 2, 3, 9], 'num': [1, 2, 3, 9], 'money': [1, 2, 3, 9]} #info指向[]的内存地址 #userinfo中的值指向[]列表内存地址,当列表内容改变时,内存地址不变,print userinfo跟着改变 #info不再指向[]的内存地址,指向了“”字符串的内存地址,userinfo指向没有改变 print("--------10") # 10.看代码写结果并解释原因 # info = [1,2,3] userinfo = [info,info,info,info,info] info[0] = '不仅多,还特么难呢' print(info,userinfo) #['不仅多,还特么难呢', 2, 3] [['不仅多,还特么难呢', 2, 3], ['不仅多,还特么难呢', 2, 3], #['不仅多,还特么难呢', 2, 3], ['不仅多,还特么难呢', 2, 3], ['不仅多,还特么难呢', 2, 3]] print("--------11") # 11.看代码写结果并解释原因 # info = [1,2,3] userinfo = [info,info,info,info,info] userinfo[2][0] = '他扒拉我' print(info,userinfo) #['他扒拉我', 2, 3] [['他扒拉我', 2, 3], ['他扒拉我', 2, 3], #['他扒拉我', 2, 3], ['他扒拉我', 2, 3], ['他扒拉我', 2, 3]] print("--------12") # 12.看代码写结果并解释原因 data = {} for i in range(10): data['user'] = i print(data) #{'user': 9} print("--------13") # 13.看代码写结果并解释原因 # data_list = []#010 [020,020,020……] data = {}#020 {'user':9} for i in range(10): data['user'] = i#1.增,2.改,3.改…… data_list.append(data)#010.append(020) print(data_list) #[{'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, # {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}, {'user': 9}] print("--------14") # 14.看代码写结果并解释原因 # data_list = []#010 for i in range(10): data = {}#012 {'user':0},每转一圈,开辟一个新空间,013 {'user':1} #小数据池的驻留机制 #数字,字符串,布尔值,不可变数据类型 data['user'] = i data_list.append(data) #010.append(012), 010.append(013)…… print(data_list) #[{'user': 0}, {'user': 1}, {'user': 2}, {'user': 3}, {'user': 4}, # {'user': 5}, {'user': 6}, {'user': 7}, {'user': 8}, {'user': 9}] print("--------15") # 15.看代码写结果(以下内容如果不是很清楚的多画画图) # v1 = [1,2,3,4,5] v2 = [v1,v1,v1] v1.append(6) print(v1) print(v2) # [1, 2, 3, 4, 5, 6] # [[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]] print("--------16") # 16.看代码写结果 # v1 = [1,2,3,4,5] v2 = [v1,v1,v1] #v2=[[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]] v2[1][0] = 111 #v2=[[111,2,3,4,5],[111,2,3,4,5],[111,2,3,4,5]] v2[2][0] = 222 #v2=[[222,2,3,4,5],[222,2,3,4,5],[222,2,3,4,5]] print(v1) print(v2) # [222, 2, 3, 4, 5] # [[222, 2, 3, 4, 5], [222, 2, 3, 4, 5], [222, 2, 3, 4, 5]] print("--------17") # 17.看代码写结果,并解释每一步的流程。 # v1 = [1,2,3,4,5,6,7,8,9] v2 = {} for item in v1:#循环列表获取每个元素 if item < 6: continue#跳过此循环,进行下一次循环 if 'k1' in v2: v2['k1'].append(item)#如果存在就通过k1获取值,并添加当前元素 else:#k1不在v2的字典中存在时 v2['k1'] = [item]#添加一对的键值对 print(v2) #{'k1': [6, 7, 8, 9]} print("--------18") # 18.看代码写结果 # import copy v1 = "alex" #小数据池驻留机制:数字,字符串,布尔值 #只要是自己定义的,只要内容一致,不管长度多少,就是共用同一个内存地址 v2 = copy.copy(v1) v3 = copy.deepcopy(v1) print(v1 is v2)#true print(v1 is v3)#true print("--------19") # 19.看代码写结果 # import copy v1 = [1,2,3,4,5] #列表、字典等可变数据类型,没有小数据池驻留情况 v2 = copy.copy(v1)#新开一壳 v3 = copy.deepcopy(v1)#新开一壳 print(v1 is v2)#false print(v1 is v3)#false print("-------20") # 20.看代码写结果 # import copy v1 = [1,2,3,4,5] v2 = copy.copy(v1) v3 = copy.deepcopy(v1) #数字属于不变元素,深浅拷贝都共用,下面全部为true print(v1[0] is v2[0]) print(v1[0] is v3[0]) print(v2[0] is v3[0]) print("--------21") # 21.看代码写结果 # import copy v1 = [1,2,3,4,[11,22]] v2 = copy.copy(v1) v3 = copy.deepcopy(v1) print(v1[-1] is v2[-1])#true,浅拷贝只拷贝第一层 print(v1[-1] is v3[-1])#false,深拷贝,可变元素开辟新空间 print(v2[-1] is v3[-1])#false,深拷贝,可变元素开辟新空间 print("--------22") # 22.看代码写结果 # import copy v1 = [1,2,3,{"name":'宝元',"numbers":[7,77,88]},4,5] v2 = copy.copy(v1) #浅拷贝只拷贝第一层,不变元素共用,可变元素联动 print(v1 is v2) #false新开了一个壳,v1,v2内存地址不同 #下面全部为true print(v1[0] is v2[0]) print(v1[3] is v2[3]) print(v1[3]['name'] is v2[3]['name']) print(v1[3]['numbers'] is v2[3]['numbers'])#注意,这个是t print(v1[3]['numbers'][1] is v2[3]['numbers'][1]) print("-------23") # 23.看代码写结果 # import copy v1 = [1,2,3,{"name":'宝元',"numbers":[7,77,88]},4,5] v2 = copy.deepcopy(v1) #deepcopy,不变元素共用,可变元素开辟新空间 print(v1 is v2) #false print(v1[0] is v2[0]) #true print(v1[3] is v2[3]) #false print(v1[3]['name'] is v2[3]['name']) #true,"宝元“属于不变元素 print(v1[3]['numbers'] is v2[3]['numbers']) #false,false属于可变元素 print(v1[3]['numbers'][1] is v2[3]['numbers'][1]) #true,数字属于不变元素
python学习-day5_作业(集合,深浅拷贝)
最新推荐文章于 2023-03-16 20:11:21 发布