集合类型内置方法和拷贝浅拷贝深拷贝 总结

集合类型内置方法

用途:数学里的集合

定义方式:{ }内用逗号隔开多个元素,元素只能是不可变类型,有两个特 征 * 1.会删除重复值 * 2.会打乱集合内的值

hobby_set = {'reading','running','sleeping','singing','sleeping'}
print(hobby_set)

#自定义set方法
hobby_list = ['reading','running','sleeping','singing','sleeping']
def set1(hobby_list) :
   s = set()
   for i in hobby_list :
       s.add(i)
   print(s)
set1(hobby_list)
{'singing', 'running', 'reading', 'sleeping'}

常用操作和内置方法:

优先掌握

# 长度len
hobby_set = {'reading','running','sleeping','singing','sleeping'}
print(len(hobby_set))
4

 

# in 和 not in
hobby_set = {'reading','running','sleeping','singing','sleeping'}
print('reading' in hobby_set)
print('read' in hobby_set)
True
False

 

#  并集 union
hobby_set = {'reading','running','sleeping','singing','sleeping'}
hobby_set2 = {'reading','running','comic','swimming'}
print(hobby_set | hobby_set2)
print(hobby_set.union(hobby_set2))
{'reading', 'sleeping', 'comic', 'swimming', 'running', 'singing'}
{'reading', 'sleeping', 'comic', 'swimming', 'running', 'singing'}

 

# & 交集 intersection
hobby_set = {'reading','running','sleeping','singing','sleeping'}
hobby_set2 = {'reading','running','comic','swimming'}
print(hobby_set & hobby_set2)
print(hobby_set.intersection(hobby_set2))
{'running', 'reading'}
{'running', 'reading'}

 

# - 差集 differdnce
hobby_set = {'reading','running','sleeping','singing','sleeping'}
hobby_set2 = {'reading','running','comic','swimming'}
print(hobby_set - hobby_set2)
print(hobby_set2 - hobby_set)
print(hobby_set.difference(hobby_set2))
{'singing', 'sleeping'}
{'comic', 'swimming'}
{'singing', 'sleeping'}

 

# ^ 对称差集 symmetric_difference
hobby_set = {'reading','running','sleeping','singing','sleeping'}
hobby_set2 = {'reading','running','comic','swimming'}
print(hobby_set ^ hobby_set2)
print(hobby_set2 ^ hobby_set)
print(hobby_set.symmetric_difference(hobby_set2))
{'sleeping', 'comic', 'swimming', 'singing'}
{'sleeping', 'comic', 'swimming', 'singing'}
{'sleeping', 'comic', 'swimming', 'singing'}

 

# ==
hobby_set = {'reading','running','sleeping','singing','sleeping'}
hobby_set2 = {'reading','running','comic','swimming'}
print(hobby_set == hobby_set2)
False

 

# 父集 :>  >=  issuperset
hobby_set = {'reading','running','sleeping','singing','sleeping'}
hobby_set2 = {'reading','running','comic','swimming'}
hobby_set3 = {'reading','sleeping'}
print(hobby_set > hobby_set3)
print(hobby_set2.issuperset(hobby_set3))
True
False

 

# 子集 <  <=  issubset
hobby_set = {'reading','running','sleeping','singing','sleeping'}
hobby_set2 = {'reading','running','comic','swimming'}
hobby_set3 = {'reading','sleeping'}
print(hobby_set < hobby_set2)
print(hobby_set3 < hobby_set2)
print(hobby_set3.issubset(hobby_set))
False
False
True

需要掌握

# add
s = {1,3,6}
print(s.add(4))
print(s)
s.add('haha')
print(s)
None
{1, 3, 4, 6}
{1, 3, 4, 6, 'haha'}

 

# remove
s = {1,3,6}
s.remove(6)
print(s)
# s.remove(9)   报错
# print(s)
{1, 3}

 

# difference_update
s = {1,3,6,9,4}
s2 ={1,3,6,5,8}
print(s.difference_update(s2))
print(s)
print(s2)
None
{4, 9}
{1, 3, 5, 6, 8}

 

# discard
s = {1,3,6,5,8,2}
print(s.discard(3))
print(s.discard(700)) #不会报错
print(s)
None
None
{1, 2, 5, 6, 8}

 

# isdisjoint  集合没有共同的部分返回True,否则返回False
s = {1,3,6,9,4}
s2 ={1,3,6,5,8}
s3 = {7}
print(s.isdisjoint(s2))
print(s.isdisjoint(s3))
False
True

存一个值or多个值 : 多个值

有序 or 无序 :无序

可变 or 不可变 :可变

s = {1,2}
print(s)
print(id(s))
s.add(3)
print(s)
print(id(s))
{1, 2}
2375254726696
{1, 2, 3}
2375254726696

存值个数区分(掌握)

|存值个数|数据类型| |:-:|:-:| |一个值:|整型、浮点型、字符串 |多个值:|列表、字典、元组、集合

按可变不可变区分(掌握)

|可变or不可变|数据类型| |:-:|:-:| |可变:|列表、字典、集合 |不可变:|整型、浮点型、字符串

有序无序区分(掌握)

|有序or无序|数据类型| |:-:|:-:| |有序:|列表、元组、字符串 |无序:|字典、集合

浅拷贝和深拷贝

拷贝

内置方法

lis = [1,3,6,[4,5]]
lis2 = lis.copy()
print(lis)
print(lis2)
lis.append(7)
print(lis)
print(lis2)
lis[3][0] = 9
print(lis)
print(lis2)
[1, 3, 6, [4, 5]]
[1, 3, 6, [4, 5]]
[1, 3, 6, [4, 5], 7]
[1, 3, 6, [4, 5]]
[1, 3, 6, [9, 5], 7]
[1, 3, 6, [9, 5]]

浅拷贝

import copy
lis = [1,3,6,[4,5]]
lis2 = copy.copy(lis)
print(lis)
print(lis2)
lis.append(7)
print(lis)
print(lis2)
lis[3][0] = 9
print(lis)
print(lis2)
[1, 3, 6, [4, 5]]
[1, 3, 6, [4, 5]]
[1, 3, 6, [4, 5], 7]
[1, 3, 6, [4, 5]]
[1, 3, 6, [9, 5], 7]
[1, 3, 6, [9, 5]]

深拷贝

import copy
lis = [1,3,6,[4,5]]
lis2 = copy.deepcopy(lis)
print(lis)
print(lis2)
lis.append(7)
print(lis)
print(lis2)
lis[3][0] = 9
print(lis)
print(lis2)
[1, 3, 6, [4, 5]]
[1, 3, 6, [4, 5]]
[1, 3, 6, [4, 5], 7]
[1, 3, 6, [4, 5]]
[1, 3, 6, [9, 5], 7]
[1, 3, 6, [4, 5]]

特殊的

import copy

t1 = (1,2,3,4,5)
print(id(t1))
t2 = copy.deepcopy(t1)
print(id(t2))
2375254489752
2375254489752

 

import copy

t1 = (1,2,3,4,[1,2])
print(id(t1))
t2 = copy.deepcopy(t1)
print(id(t2))
2375254490104
2375254276144

 

lis = [1,2,3]
t1 = (1,2,lis)
print(t1)
lis.append(4)
print(lis)
print(t1)
(1, 2, [1, 2, 3])
[1, 2, 3, 4]
(1, 2, [1, 2, 3, 4])