1.dict和list中copy方法画图加代码解释
(1)dict浅拷贝
dict_data与dict_data2是独立的个体,但二者中的元素指的是同一个,所以当其中一个改变时,另一个也随之改变
注:手绘图中,红色是第一次内存,黑色是其他
dict_data = {1: [1, 2, 3]} dict_data2 = dict_data.copy() print(dict_data2) print(id(dict_data[1])) print(id(dict_data2[1])) print(id(dict_data)) print(id(dict_data2)) dict_data[1][2] = 6 print(dict_data) print(dict_data2)
运行结果
{1: [1, 2, 3]}
1925148646656
1925148646656
1925148575040
1925148575232
{1: [1, 2, 6]}
{1: [1, 2, 6]}
(2)dict深拷贝
dict_data与dict_data2完全独立,二者的元素不同,故当一个改变时,另一个不变
import copy dict_data = {1: [1, 2, 3]} dict_data2 = copy.deepcopy(dict_data) print(dict_data2) print(id(dict_data[1])) print(id(dict_data2[1])) print(id(dict_data)) print(id(dict_data2)) dict_data[1][0] = 9 print(dict_data) print(dict_data2)
运行结果:
{1: [1, 2, 3]}
1925255857216
1925255554944
1925255464256
1925255535936
{1: [9, 2, 3]}
{1: [1, 2, 3]}
(3)list浅拷贝
list_data与list_data2独立,列表外层改变,另一个不变,列表内层改变,另一个随之改变
list_data = [1, [2, 3]] list_data2 = list_data.copy() print(list_data2) print(id(list_data2)) print(id(list_data)) print(id(list_data[0])) print(id(list_data[0])) list_data[1][1] = 55 list_data[0] = 6 print(list_data) print(list_data2)
运行结果:
[1, [2, 3]]
2688499980928
2688499980800
2688498952496
2688498952496
[8, [2, 55]]
[1, [2, 55]]
(4)list深拷贝
import copy list_data = [1, [2, 3]] list_data2 = copy.deepcopy(list_data print(list_data2) print(id(list_data)) print(id(list_data2)) print(id(list_data[0])) print(id(list_data2[0])) print(id(list_data[1])) print(id(list_data2[1])) list_data[1][1] = 56 print(list_data) print(list_data2)
运行结果:
[1, [2, 3]]
1623764201024
1623764199296
1623762430256
1623762430256
1623764497664
1623764654912
[1, [2, 56]]
[1, [2, 3]]
2.dict中扩展字典长度(多种方法)
(1)key = value
dict_data = {1: 2, 2: 3} dict_data[3] = 4 print(dict_data)
运行结果:
{1: 2, 2: 3, 3: 4}
(2)setdefault-------插入
dict_data = {1: 2, 2: 3, 3: 4} dict_data.setdefault(4, 5) print(dict_data)
运行结果:
{1: 2, 2: 3, 3: 4, 4: 5}
(3)update-------迭代(字典,元组((key, value), (key, value)),列表【【key, value】, 【key, value】】)
dict_data = {1: 2, 2: 3, 3: 4} dict_data1 = {4: 5} dict_data.update(dict_data1) print(dict_data)
运行结果:
{1: 2, 2: 3, 3: 4, 4: 5}
3.dict中获取所有的key,获取所有的value,获取所有的item
(1)key
dict_data = {1: 2, 2: 3, 3: 4} data = dict_data.keys() print(data)
运行结果:
dict_keys([1, 2, 3])
(2)value
dict_data = {1: 2, 2: 3, 3: 4} data = dict_data.values() print(dict_data) print(data)
运行结果:
{1: 2, 2: 3, 3: 4}
dict_values([2, 3, 4])
(3)item
dict_data = {1: 2, 2: 3} data = dict_data.items() print(data)
运行结果:
dict_items([(1, 2), (2, 3)])
4.dict中通过一个不存在的key去获取值(要求不报错)
(1)get
dict_data = {1: 2, 2: 3} data = dict_data.get(3) print(data)
运行结果:
None
(2)setdefault
dict_data = {1: 2, 2: 3} data = dict_data.setdefault(3) print(data)
运行结果:
None
5.定义空集合
data = set() print(data) print(type(data))
运行结果:
set()
<class 'set'>
6.set中,求差集,求合集,求交集(要求在原集合上操作)
添加一个元素
删除一个元素(使用多种方法)
(1)差集
set_data = {1, 3, 5, 7, 9} set_data2 = {1, 2, 3, 4, 5} set_data.symmetric_difference_update(set_data2) print(set_data)
运行结果:
{2, 4, 7, 9}
(2)合集
set_data = {1, 3, 5, 7, 9} set_data2 = {1, 2, 3, 4, 5} set_data.update(set_data2) print(set_data)
运行结果:
{1, 2, 3, 4, 5, 7, 9}
(3)交集
set_data = {1, 3, 5, 7, 9} set_data2 = {1, 2, 3, 4, 5} set_data.intersection_update(set_data2) print(set_data)
运行结果:
{1, 3, 5}
(4)添加一个元素
add------添加------将元素添加到集合中
set_data = {1, 3, 5} set_data.add(4) print(set_data)
运行结果:
{1, 3, 4, 5}
(5)删除一个元素
(1)clear(删除所有元素)
set_data = {1, 2, 3} set_data.clear() print(set_data)
运行结果:
set()
(2)pop
set_data = {1, 2, 3, 4, 5, 6, 7} data = set_data.pop() print(data, set_data) 运行结果:
1 {2, 3, 4, 5, 6, 7}
(3)remove
set_data = {1, 2, 3, 4, 5, 7, 8} set_data.remove(8) print(set_data)
运行结果:
{1, 2, 3, 4, 5, 7}
(4)discard
set_data = {1, 2, 3, 4, 5, 7, 8} set_data.discard(1) print(set_data)
运行结果:
{2, 3, 4, 5, 7, 8}
(5) difference_update
set_data = {1, 2, 3, 4, 5, 7, 8} set_data1 = {1} set_data.difference_update(set_data1) print(set_data)
运行结果:
{2, 3, 4, 5, 7, 8}