1.dict和list中copy方法画图加代码解释
dict的浅拷贝
a和b两者是独立的,但里面的列表还是同一个,因此a列表改变后b列表也会随之改变
dict的深层拷贝
深层拷贝两者独立,创建新的列表,所以a字典当中列表改变吧当中也不会改变
import copy
dict_data = {1: [1, 2, 3]}
newdict_data = copy.deepcopy(dict_data)
print(id(dict_data[1]))
print(id(newdict_data[1]))
print(id(dict_data))
print(id(newdict_data))
dict_data[1][1] = 8
print(dict_data)
print(newdict_data)
结果
1599513995264
1599513988608
1599512539712
1599512590208
{1: [1, 8, 3]}
{1: [1, 2, 3]}
list的浅层拷贝
浅拷贝, a
list_data1和 list_data2 是一个独立的对象,但他们的子对象还是指向统一对象(是引用),列表外层改变时另一个也改变。
list_data1 = [1, [1, 2, 3]]
list_data2 = list_data1.copy()
print(id(list_data1[1]))
print(id(list_data2[1]))
print(id(list_data1))
print(id(list_data2))
list_data1[1][1] = 8
print(list_data1)
print(list_data2)
结果
2568433930048
2568433930048
2568433849024
2568433928960
[1, [1, 8, 3]]
[1, [1, 8, 3]]
深拷贝:: 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。列表外层改变时另一个不改变
import copy
list_data1 = [1, [1, 2, 3]]
list_data2 = copy.deepcopy(list_data1)
print(id(list_data1[1]))
print(id(list_data2[1]))
print(id(list_data1))
print(id(list_data2))
list_data1[1][1] = 8
print(list_data1)
print(list_data2)
结果
2093104539584
2093104537792
2093104532928
2093104532672
[1, [1, 8, 3]]
[1, [1, 2, 3]]
2.dict中扩展字典长度(多种方法)
setdefault(self, key, default=None, /)插入键和值
dict_data[4] = 5,直接创建键和值
update 更新字典来扩展长度
3.dict中获取所有的key,获取所有的value,获取所有的item
4.dict中通过一个不存在的key去获取值(要求不报错)
第一种使用setdefault的方法来获取(拓展了字典内容)
第二种使用get获取(不改变字典内容)
5.定义空集合
第一种直接定义
第二种先创建一个集合,将其中元素删除即为空集合
6.set中,求差集,求合集,求交集(要求在原集合上操作)
合集 : update(...)
| Update a set with the union of itself and others.
差集:symmetric_difference_update(...)
| Update a set with the symmetric difference of itself and another.
交集:intersection_update(...) | Update a set with the intersection of itself and another.
添加一个元素
add(...)
| Add an element to a set.
删除一个元素(使用多种方法)
第一种clear直接删除所有
第二种remove删除元素
第三种discard()方法
说明:discard方法删除元素时,元素不存在,不会引发任何错误
第四种pop方法
说明:从set中随机删除并返回一个元素,set为空会引发KeyError