首页 > 其他 > 详细

深度拷贝,集合,

时间:2019-04-25 10:04:34      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:异或   xor   去除   class   ==   类型   pan   联合   遍历   

一、深度拷贝:

(一般了解)

1、浅拷贝:

s=[[1,2],alex,asada]
s2=s.copy()
print(s2)
s2[0][1]=3
print(s2)
print(s)

 技术分享图片

从该程序中可知,当第二层列表中元素被修改后,原列表内容也发生变化,这是因为元素修改,改变了列表指针,使得s列表s[0]元素指向元素发生变化。如图所示:

技术分享图片

技术分享图片

修改列表后,原列表发生变化(原因:a列表指针发生变化,造成原列表中列表数据变化)

浅拷贝:只拷贝第一层

深拷贝:全部拷贝

s3=[1,alex,asada]
s4=s3.copy()
s4[0]=2
print(s4)
print(s3)

技术分享图片

2、深度拷贝:

import copy
s=[[1,2],alex,asada]
s2=copy.deepcopy(s)#深拷贝操作
print(s2)
s2[0][1]=3
print(s2)
print(s)

技术分享图片

注意:深度拷贝操作后,即使新列表第二层被修改,原列表依然不变。

二、集合:

1、创建方法:

set() ,frozenset()

s=set(alex li)
print(s,type(s))

技术分享图片

集合可将重复元素去除,数据类型为set

注:集合对象是一组无序排列可hash的值,集合成员可以做字典的键

2、访问集合:由于集合本身是无序的,所以不能为集合创建索引或切片操作,只能循环遍历或使用in、not in来访问或判断集合元素。

3、更新集合:
s.add()    s.update()    s.remove()

1 s2=set(alvin)
2 s2.add(mm)
3 print(s2)  #{‘mm‘, ‘l‘, ‘n‘, ‘a‘, ‘i‘,‘v‘}
1  s2.update(HO)#添加多个元素
2 print(s2)  #{‘mm‘, ‘l‘, ‘n‘, ‘a‘, ‘i‘, ‘H‘, ‘O‘, ‘v‘}
1 s2.remove(l)
2 print(s2)  #{‘mm‘, ‘n‘, ‘a‘, ‘i‘, ‘H‘, ‘O‘, ‘v‘}

del:删除集合本身

4、集合类型操作符:
     1、in not in
     2、集合等价于不等价(==,!=)
     3、子集,超集

1 s=set(alvinyuan)
2 s1=set(alvin)
3 print(v  in s)
4 print(s1<s)#True-------------s1是s的子集

    4、联合(|): 联合(union)操作与集合的or操作其实等价的,联合符号有个等价的方法,union()。    并集操作

1 s1=set(alvin)
2 s2=set(yuan)
3 s3=s1|s2
4 print(s3) #{‘a‘, ‘l‘, ‘i‘, ‘n‘, ‘y‘, ‘v‘, ‘u‘}
5 print(s1.union(s2)) #{‘a‘, ‘l‘, ‘i‘, ‘n‘, ‘y‘, ‘v‘, ‘u‘} 

   5、交集(&):与集合and等价,交集符号的等价方法是intersection()

1 s1=set(alvin)
2 s2=set(yuan)
3 s3=s1&s2
4 print(s3)#{‘n‘, ‘a‘}  
5 print(s1.intersection(s2)) #{‘n‘, ‘a‘}

   6、差集(-):等价方法是difference()

 1 s1=set(alvin)
 2 s2=set(yuan)
 3 s3=s1-s2
 4 print(s3)#{‘v‘, ‘i‘, ‘l‘}
 5  
 6 print(s1.difference(s2)) #{‘v‘, ‘i‘, ‘l‘}
 7 
 8 s4=s2-s1
 9 print(s4)#{‘y‘,‘u‘}
10 print(s2.difference(s1)) #{‘y‘,‘u‘}

  7、对称差集(^):对称差分是集合的XOR(‘异或’),取得的元素属于s1,s2但不同时属于s1和s2.其等价方法symmetric_difference()

1 s1=set(alvin)
2 s2=set(yuan)
3 s3=s1^s2
4 print(s3)  #{‘l‘, ‘v‘, ‘y‘, ‘u‘, ‘i‘}
5  
6 print(s1.symmetric_difference(s2)) #{‘l‘, ‘v‘, ‘y‘, ‘u‘, ‘i‘}

 

深度拷贝,集合,

标签:异或   xor   去除   class   ==   类型   pan   联合   遍历   

原文:https://www.cnblogs.com/dylee/p/10766402.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号