python深拷贝报错_学习python的第十天(集合数据类型,拷贝,深拷贝,浅拷贝)...

5.9自我总结

1.集合数据类型

1.定义

用{}中间值用,隔开,且集合中元素排列是无序的,而且如果有相同元素会只保留一个

2.算法

1.必须掌握

1.长度len

set_1 = {1,2,3,4,5}

print(len(set_1))

#5

2.成员运算in和not in

#表示判断集合里面是否有某个值

set_1 = {1,2,3,4,5}

print(1 in set_1)

#true

print(100 in set_1)

#false

3.并集(union或者|)

#两个集合的集合综合,union或者|

set_1 = {1,2,3}

set_2 = {3,4,5}

set_3 = set_1.union(set_2)

set_4 = (set_1 | set_2)

print(set_3)

print(set_4)

#{1, 2, 3, 4, 5}

)

4.交集(intersection或者&)

set_1 = {1,2,3}

set_2 = {3,4,5}

set_3 = set_1.intersection(set_2)

set_4 = (set_1 & set_2)

print(set_3)

print(set_4)

#{2}

)

5差集(difference 或者 -)

set_1 = {1,2,3}

set_2 = {3,4,5}

set_3 = set_1.difference(set_2)

set_4 = (set_1 - set_2)

print(set_3)

print(set_4)

#{1,2}

6.对称差集

set_1 = {1,2,3}

set_2 = {3,4,5}

set_3 = set_1.symmetric_difference(set_2)

set_4 = (set_1 ^ set_2)

print(set_3)

print(set_4)

#{1, 2, 4, 5}

7.集合内容是否相同(==)

set_1 = {1,2,3}

set_2 = {3,4,5}

print(set_1 == set_2)

#false

8.父集(>或者>=或者issuperset)

set_1 = {1,2,3}

set_2 = {1,2,3}

set_3 = set_1.issuperset(set_2) #issuperset与>=意思相同

set_4 = (set_1 > set_2) #如果set_2 = {2},结果也为true

print(set_3) #true

print(set_4) #false

9.子集(

set_1 = {1,2,3}

set_2 = {1,2,3}

set_3 = set_1.issubset(set_2) #issubset与<=意思相同

set_4 = (set_1 < set_2) #如果set_2 = {2},结果也为true

print(set_3) #true

print(set_4) #false

2.掌握

1.add

添加,打印添加时候回返回none

2.remove

移除,打印添加时候回返回none,找不到移除的内容会报错

3.difference_update

删除相同的值 打印添加时候回返回none

4.discard

移除,打印添加时候回返回none,找不到移除的内容也会返回none

5.isdisjoint

判断有无交集

3.一个值或多个值

一个值

4,有序的或无序的

无序的

5.可变的或不可变

可变

2.深拷贝,浅拷贝,拷贝

比如说a拷贝b,a里面的值发送变化时候b也会发生变化,浅拷贝和深拷贝一般出现在一个变量里有多个元素,有可变的元素和不可变的元素,比如若说a浅拷贝b,其中b可变元素变了,a也变了,b中不可变元素变了,a不会变,深拷贝则是,其中不管哪个元素变了后,两者互不影响受限。

3.今日题目

第一部分

有如下两个集合,pythons是报名python课程的学员名字集合,linuxs是报名linux课程的学员名字集合。

pythons={'jason','nick','sean','tank','gangdan','tiepao'}

linuxs={'tank','oldboy','gangdan'}

求出即报名python又报名linux课程的学员名字集合

pythons={'jason','nick','sean','tank','gangdan','tiepao'}

linuxs={'tank','oldboy','gangdan'}

pythons_linuxs = pythons & linuxs

print(pythons_linuxs)

求出所有报名的学生名字集合

pythons={'jason','nick','sean','tank','gangdan','tiepao'}

linuxs={'tank','oldboy','gangdan'}

pythons_linuxs = pythons | linuxs

print(pythons_linuxs)

求出只报名python课程的学员名字

pythons={'jason','nick','sean','tank','gangdan','tiepao'}

linuxs={'tank','oldboy','gangdan'}

pythons_linuxs = pythons - linuxs

print(pythons_linuxs)

求出没有同时这两门课程的学员名字集合

pythons={'jason','nick','sean','tank','gangdan','tiepao'}

linuxs={'tank','oldboy','gangdan'}

pythons_linuxs = pythons ^ linuxs

print(pythons_linuxs)

第二部分

有列表l=['a','b',1,'a','a'],列表元素均为可hash类型,去重,得到新列表,且新列表无需保持列表原来的顺序

#去重

l=['a','b',1,'a','a']

new_l = set(l)

在上题的基础上,保存列表原来的顺序

#第一种,想法,先用set把他变成有序,再找到相同的删掉在原来的位置,后面循环发现删了后索引没法索引,就根据长度再套了个循环

l=['a','b',1,'a','a']

l_2 = set(l)

while len(l) != len(l_2):

for v_1 in range(len(l)):

for v_2 in range(1,len(l)):

if l[v_1] == l[v_2]:

d = v_2

break

del l[d]

print(l)

#第二种 做第三题发现里面有字典没法转换成set,想到这样,后来发现这样就可以了。。

l_2 = []

for a in l:

if a not in l_2:

l_2.append(a)

print(l_2)

有如下列表,列表元素为不可hash类型,去重,得到新列表,且新列表一定要保持列表原来的顺序

l=[

{'name':'nick','age':18,'sex':'male'},

{'name':'tank','age':73,'sex':'male'},

{'name':'nick','age':20,'sex':'female'},

{'name':'nick','age':18,'sex':'male'},

{'name':'nick','age':18,'sex':'male'},

]

#第一种

l=[

{'name':'nick','age':18,'sex':'male'},

{'name':'tank','age':73,'sex':'male'},

{'name':'nick','age':20,'sex':'female'},

{'name':'nick','age':18,'sex':'male'},

{'name':'nick','age':18,'sex':'male'},

]

l_2 = []

for a in l:

if a not in l_2:

l_2.append(a)

while len(l) != len(l_2):

for v_1 in range(len(l)):

for v_2 in range(1,len(l)):

if l[v_1] == l[v_2]:

d = v_2

break

del l[d]

print(l)

#第二种 由于列表里有字典没法set,然后想到这样加进去,后面就这样了

l_2 = []

for a in l:

if a not in l_2:

l_2.append(a)

print(l_2)

第三部分

请简述拷贝、浅拷贝、深拷贝三者之间的区别:

比如说a拷贝b,a里面的值发送变化时候b也会发生变化,浅拷贝和深拷贝一般出现在一个变量里有多个元素,有可变的元素和不可变的元素,比如若说a浅拷贝b,其中b可变元素变了,a也变了,b中不可变元素变了,a不会变,深拷贝则是,其中不管哪个元素变了后,两者互不影响受限。

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值