python基础—day7 深度拷贝与集合
深度拷贝
-
直接赋值:其实就是对象的引用(别名)。
-
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
-
深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
字典浅拷贝实例
实例
深度拷贝需要引入 copy 模块:
实例
1、b = a: 赋值引用,a 和 b 都指向同一个对象。

2、b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。

b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。

实例
以下实例是使用 copy 模块的 copy.copy( 浅拷贝 )和(copy.deepcopy ):
# -*-coding:utf-8 -*-
import copy a = [1, 2, 3, 4, ['a', 'b']]
#原始对象 b = a #赋值,传对象的引用
c = copy.copy(a)
#对象拷贝,浅拷贝 d = copy.deepcopy(a) #对象拷贝,深拷贝
a.append(5)
#修改对象a
a[4].append('c')
#修改对象a中的['a', 'b']数组对象
print( 'a = ', a ) print( 'b = ', b )
print( 'c = ', c ) print( 'd = ', d )
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]
集合——元素之间不允许重复
集合的创建
集合(set)是一个无序的不重复元素序列。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典
s1 = set(('apple', 'orange', 'apple', 'pear', 'orange', 'banana'))
print(s1)
s2={'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
print(s2)
#{'orange', 'banana', 'apple', 'pear'}
#集合不允许重复
t3 ={1,11,1,1,2,3,4,5,6,7,7}
print(s3)
#{1, 2, 3, 4, 5, 6, 7, 11}
#空集合
s={}
print(type(s))
<class 'dict'>
s1=set()
print(type(s1))
<class 'set'>
集合的基本操作
1、添加元素
语法格式如下:
s.add( x )
将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作。
thisset = set(("Google", "Runoob", "Taobao"))
thisset.add("Facebook")
print(thisset)
#{'Taobao', 'Facebook', 'Google', 'Runoob'}
s.update( x )
也可以添加元素,且参数可以是列表,元组,字典等,语法格式如下:
thisset = set(("Google", "Runoob", "Taobao"))
thisset.update({1,3})
print(thisset)
#{1, 3, 'Google', 'Taobao', 'Runoob'}
thisset.update([1,4],[5,6])
print(thisset)
#{1, 3, 4, 5, 6, 'Google', 'Taobao', 'Runoob'}
2、移除元素
语法格式如下:
s.remove( x )
将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误
thisset = set(("Google", "Runoob", "Taobao"))
thisset.remove("Taobao")
print(thisset)
#{'Google', 'Runoob'}
s.discard( x )
移除集合中的元素,且如果元素不存在,不会发生错误。格式如下所示:
thisset.discard('Google')
print(thisset)
#{'Runoob'}
s.pop()
可以设置随机删除集合中的一个元素,语法格式如下:
thisset = set(("Google", "Runoob", "Taobao", "Facebook"))
x = thisset.pop()
print(x)
#Taobao
print(thisset)
#{'Runoob', 'Google', 'Taobao'}
4、清空集合
语法格式如下:
s.clear()
thisset = set(("Google", "Runoob", "Taobao"))
thisset.clear()
print(thisset)
set()
5.集合间的关系
#两个集合是否相等(元素相同就像相等)
s={10,20,30,40}
s1={40,30,20,10}
print(s==s1)
print(s!=s1)
#True
#False
#一个集合是否是一个集合的子集
s1={10,20,30,40,50,60}
s2={10,20,30,40}
s3={10,20,90}
print(s2.issubset(s1)) #True
print(s3.issubset(s1)) #False
#判断一个集合是否是另一个集合的超集
print(s1.issuperset(s2)) #True
print(s1.issuperset(s3)) #False
#两个集合是否没有交集
print(s2.isdisjoint(s3)) #False 说明有交集
6集合的数据操作
s1={10,20,30,40,50,60}
s2={10,20,30,40}
s3={10,20,90}
#交集
print(s1.intersection(s2)) #{40, 10, 20, 30}
print(s1 & s2 ) #与intersection 等价
#并集操作
print(s1.union(s2)) #{40, 10, 50, 20, 60, 30}
print(s1 | s2 ) # 与union等价
#差集操作
print(s1.difference(s2)) #{50, 60}
print(s1-s2)
#对此差集
print(s1.symmetric_difference_update(s2))

浙公网安备 33010602011771号