python第五天

目录

一、dict 和 list 中 copy 方法画图加代码解释

dict 浅拷贝

dict深拷贝

 list 浅拷贝

list 深拷贝

二、dict 中扩展字典长度

1、setdefault

2、update

3、[key] = 值

三、dict中获取所有的key,获取所有的value,获取所有的item 

获取key

获取value

获取item

四、dict中通过一个不存在的key去获取值(要求不报错)

五、定义空集合

六、set中,求差集,求合集,求交集(要求在原集合上操作)

差集

合集

交集

添加一个元素

add

pop

remove 

discard  

 clear

difference_update


一、dict 和 list 中 copy 方法画图加代码解释

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

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

dict 浅拷贝

dict浅拷贝,dict_data1和dict_data2两者是独立的,但是里面的元素指向同一个,所以一个改变后,另一个也会随之而变。

画图:

代码:

dict_data1 = {1: [1, 2, 3]}
dict_data2 = dict_data1.copy()
print(dict_data2)
print(id(dict_data1[1]))
print(id(dict_data2[1]))
print(id(dict_data1))
print(id(dict_data2))
dict_data1[1][1] = 4
print(dict_data1)
print(dict_data2)

运行结果:

dict深拷贝

dict深拷贝完全拷贝,两者完全独立,即使改变一个,另一个仍保持不变。

画图

代码

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][1] = 8
print(dict_data)
print(dict_data2)

 运行结果

{1: [1, 2, 3]}
2472985995776
2472985993344
2472980210432
2472984590528
{1: [1, 8, 3]}
{1: [1, 2, 3]}

 list 浅拷贝

list浅拷贝中list_data1和list_data2是两个独立个体,列表最外层改变,另一个不会改变;列表最内层改变,另一个会做出相应改变。

画图

 代码

list_data = [1, [2, 3]]
list_data2 = list_data.copy()
print(list_data2)
print(id(list_data))
print(id(list_data2))
print(id(list_data[0]))
print(id(list_data[0]))
print(id(list_data[1]))
print(id(list_data2[1]))
list_data[1][0] = 8
list_data[0] = 8
print(list_data)
print(list_data2)

 运行结果

[1, [2, 3]]
1698946565248
1698946649408
1698943494448
1698943494448
1698946654656
1698946654656
[8, [8, 3]]
[1, [8, 3]]

list 深拷贝

ist深拷贝中list_data1和list_data2是两个独立个体,里面的元素无论怎么变,另一个都不会变。

画图

 代码

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_data2[0]))
print(id(list_data2[0]))
print(id(list_data[1]))
print(id(list_data2[1]))
list_data[1][0] = 8
print(list_data)
print(list_data2)

 运行结果

[1, [8, 3]]
1999515586368
1999515586112
1999508957488
1999508957488
1999515593024
1999515591232
[1, [8, 3]]
[1, [2, 3]]

二、dict 中扩展字典长度

1、setdefault

Insert key with a value of default if key is not in the dictionary.
如果键不在字典中,则插入值为默认值的键

dict_data = {1: 2, 3: 4, 5: 6}
dict_data.setdefault(4)
print(dict_data)

2、update

D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.

从字典/可迭代 E 和 F 更新 D

dict_data = {1: 2, 3: 4, 5: 6}
dict_data1 = {4: 5}
dict_data.update(dict_data1)
print(dict_data)

  

3、[key] = 值

dict_data = {1: 2, 3: 4}
dict_data[3] = 4
print(dict_data)

三、dict中获取所有的key,获取所有的value,获取所有的item 

获取key

dict_data = {1: 2, 2: 3, 3: 4}
print(dict_data.keys())

获取value

dict_data = {1: 2, 2: 3, 3: 4}
print(dict_data.values())
dict_values([2, 3, 4])

获取item

dict_data = {1: 2, 2: 3, 3: 4}
print(dict_data.items())
dict_items([(1, 2), (2, 3), (3, 4)])

四、dict中通过一个不存在的key去获取值(要求不报错)

.get和.setdefault都可以通过不存在的key去获取值,不报错(输出值都是空)

dict_data = {1: 2, 2: 3, 3: 4}
print(dict_data.get(4))
print(dict_data.setdefault(4))
None
None

五、定义空集合

data = set()
print(data, type(data))

六、set中,求差集,求合集,求交集(要求在原集合上操作)

差集

set_data = {1, 3, 5, 6, }
set_data1 = {1, 2, 3, 5, 6}
set_data.symmetric_difference_update(set_data1)  
print(set_data)
结果
{2}

合集

set_data = {1, 3, 5, 6, 7}
set_data1 = {1, 2, 3, 5, 6}
set_data.update(set_data1)  
print(set_data)
结果
{1, 2, 3, 5, 6, 7}

交集

set_data = {1, 3, 5}
set_data1 = {1, 2, 3, 4}
set_data.intersection_update(set_data1)  
print(set_data)
结果
{1, 3}

添加一个元素

add

将元素添加到集合中

set_data = {1, 3}
set_data.add(2)        
print(set_data)
结果
{1, 2, 3}

pop

删除并返回第一个元素

set_data = {1, 3, 4, 5, 6, 7}
data = set_data.pop()  
print(data, set_data)
结果
1 {2, 3, 4, 5, 6, 7}

remove 

从集合中删除元素;它必须是成员

set_data = {1, 3, 4, 5, 7, 8}
set_data.remove(1)  
print(set_data)
结果
{3, 4, 5, 7, 8}

discard  

如果元素是成员,则从集合中删除该元素。 

set_data = {1, 3, 5}
set_data.discard(1)  
print(set_data)
结果
{3, 5}

 clear

从此集中删除所有元素 

set_data = {1, 3}
set_data.clear()        
print(set_data)
结果
set()

difference_update

从此集中删除另一组的所有元素

set_data = {1, 3, 5}
set_data1 = {1}
set_data.difference_update(set_data1) 
print(set_data)
结果
{3, 5}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值