Python学习(006)-深浅拷贝及集合

 深浅拷贝

 1 import copy
 2 
 3 husband=['xiaoxin',123,[200000,100000]]
 4 
 5 wife=husband.copy()   #浅拷贝
 6 wife[0]='xiaohong'
 7 wife[1]='456'
 8 
 9 xiaosan=copy.deepcopy(husband)  #深拷贝
10 xiaosan[0]='xiaoyu'
11 xiaosan[1]='666'
12 
13 wife[2][1] -=2000
14 xiaosan[2][1] -=1999
15 
16 print(husband,wife,xiaosan)
View Code

结果:

['xiaoxin', 123, [200000, 98000]] ['xiaohong', '456', [200000, 98000]] ['xiaoyu', '666', [200000, 98001]]

  浅拷贝,只会拷贝第一层

当其中有列表等第二次时,拷贝后进行修改,元数据也会进行修改

修改数据前:

 修改数据后:

 

 集合

集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了
  • 关系测试,测试两组数据之前的交集、差集、并集等关系

集合(set):把不同的元素组成一起形成集合,是python基本的数据类型。

集合元素(set elements):组成集合的成员(不可重复)

s=set('Nicknick')
s1=['nick','xiaoli','xiaozhang','nick']
print(s)   #{'c', 'i', 'N', 'k'}
s1=set(s1)
print(s1)  #{'xiaoli', 'nick', 'xiaozhang'}
View Code

 

s = set([3,5,9,10])      #创建一个数值集合  
  
t = set("Hello")         #创建一个唯一字符的集合  


a = t | s          # t 和 s的并集  
  
b = t & s          # t 和 s的交集  
  
c = t – s          # 求差集(项在t中,但不在s中)  
  
d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)  
  
   
  
基本操作:  
  
t.add('x')            # 添加一项  
  
s.update([10,37,42])  # 在s中添加多项  
  
   
  
使用remove()可以删除一项:  
  
t.remove('H')  
  
  
len(s)  
set 的长度  
  
x in s  
测试 x 是否是 s 的成员  
  
x not in s  
测试 x 是否不是 s 的成员  
  
s.issubset(t)  
s <= t  
测试是否 s 中的每一个元素都在 t 中  
  
s.issuperset(t)  
s >= t  
测试是否 t 中的每一个元素都在 s 中  
  
s.union(t)  
s | t  
返回一个新的 set 包含 s 和 t 中的每一个元素  
  
s.intersection(t)  
s & t  
返回一个新的 set 包含 s 和 t 中的公共元素  
  
s.difference(t)  
s - t  
返回一个新的 set 包含 s 中有但是 t 中没有的元素  
  
s.symmetric_difference(t)  
s ^ t  
返回一个新的 set 包含 s 和 t 中不重复的元素  
  
s.copy()  
返回 set “s”的一个浅复制

 

a=set([1,2,3,4,5])
b=set([4,5,6,7,8])

#交集
print(a.intersection(b))   #{4, 5}
print(a&b)

#并集
print(a.union(b))    #{1, 2, 3, 4, 5, 6, 7, 8}
print(a|b)

#差集
print(a.difference(b))    #{1, 2, 3}
print(a-b)
print(b.difference(a))    #{8, 6, 7}
print(b-a)

#对称差集  反向交集
print(a.symmetric_difference(b))      #{1, 2, 3, 6, 7, 8}
print(a^b)

#父集  超级
print(a.issuperset(b))
print(a>b)                 #False

#子集
print(a.issubset(b))
print(a<b)              #False

 

posted @ 2018-10-10 14:29  Nick1994  阅读(79)  评论(0编辑  收藏