python当中浅拷贝和深拷贝详细介绍和dict与set的操作方法

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值