自学Python--集合及深浅copy

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41402059/article/details/82119831

集合:无序不重复可变数据类型,但是元素必须不可变

set1 = set({1, 2, 3, 4, 5, 6})
set2 = {1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6}
print(set1) # {1, 2, 3, 4, 5, 6}
print(set2) # {1, 2, 3, 4, 5, 6}

通过集合对列表去重:

l = [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]
print(list(set(l))) # [1, 2, 3, 4, 5, 6]

 

集合增删改查:

增:

add()

update()迭代添加

set1 = {1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6}
set1.update('abc')
print(set1) # {1, 2, 3, 4, 5, 6, 'c', 'b', 'a'}

 

删:

pop()随机删除,返回删除的元素

remove() 按元素删除

clear()清空集合

del删除集合

 

改:不能改(元素不可变)

 

查:只能遍历查

交集:

set1 = {1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6}
set2 = {1, 2, 3, 7, 8, 9}

# 交集
set3 = set1 & set2
set4 = set1.intersection(set2)
print(set3) # {1, 2, 3}
print(set4) # {1, 2, 3}

# 并集
set5 = set1 | set2 
set6 = set1.union(set2) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(set5) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(set6) # {1, 2, 3, 4, 5, 6, 7, 8, 9}

判断是否是子集or超集:set1.issubset(set2)  or set1.issubset(set2)

set1 = {1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6}
set2 = {1, 2, 3}
print(set2 < set1) # True
print(set2.issubset(set1)) # True 说明set2是set1子集

集合转换为不可变类型:

frozenset():

set1 = {1, 2, 3, 4, 5, 6}
set2 = frozenset(set1)
print(set2)
print(type(set2))

深浅copy:

深copy新建一个对象重新分配内存地址、复制对象内容

浅copy不重新分配内存地址,内容指向之前的内存地址,如果对象中由引用其他对象,如果子对象进行修改,子对象的内容就会改变

=赋值:简单的拷贝对象的引用,两对象的id相同

浅拷贝:创建一个新的组合对象,与原对象共享内存中子对象

深拷贝:创建一个新的组合对象,同时递归拷贝所有子对象,与原对象没有任何关联

import copy
a = [[1, 2], [3, 4] ,[5, 6]]
b = a # 赋值
c = copy.copy(a) # 浅拷贝得到c
d = copy.deepcopy(a) # 深拷贝得到d

print(a) # [[1, 2], [3, 4] ,[5, 6]]
print(b) # [[1, 2], [3, 4] ,[5, 6]]
print(c) # [[1, 2], [3, 4] ,[5, 6]]
print(d) # [[1, 2], [3, 4] ,[5, 6]]
print(b is a) # True
print(c is a) # False
print(d is a) # False

# 改变不复杂的子对象,浅copy不会改变
a.append([7, 8])
print(a) # [[1, 2], [3, 4], [5, 6], [7, 8]]
print(b) # [[1, 2], [3, 4], [5, 6], [7, 8]]
print(c) # [[1, 2], [3, 4], [5, 6]]
print(d) # [[1, 2], [3, 4], [5, 6]]
print(b is a) # True
print(c is a) # False
print(d is a) # False

# 改变复杂的子对象,浅copy会随着改变
a[0].append(3)
print(a) # [[1, 2], [3, 4], [5, 6], [7, 8]]
print(b) # [[1, 2], [3, 4], [5, 6], [7, 8]]
print(c) # [[1, 2, 3], [3, 4], [5, 6]]
print(d) # [[1, 2], [3, 4], [5, 6]]
print(b is a) # True
print(c is a) # False
print(d is a) # False

猜你喜欢

转载自blog.csdn.net/weixin_41402059/article/details/82119831