6 Python中dict和set

python中dict相关知识

dict属于mapping类型,同时也是一个可迭代对象

from collections.abc import Mapping, MutableMapping

a = {}
print(isinstance(a, Mapping))
print(isinstance(a, MutableMapping))
# dict实现了Mapping中的方法,所以返回值都为True。

其中dict.copy()实现为shallow copy,所以我们在进行dict的deep copy需要import copy中的deepcopy()
下面简单说下,对于深拷贝和浅拷贝的区别:
这里面还牵扯到一些概念,可变变量和不可变变量。可变变量是指,对一个对象中的值进行修改时,在不改变其值所指向的地址情况下,可以修改指向该地址的值;不可变变量是指,你对一个对象指向地址的值无法进行修改,否则将会改变该对象的值所指向的地址。
对于深拷贝而言,浅拷贝所拷贝出的新对象和原对象的地址是不一样的(这里的原对象和新对象属于不可变变量),但是对象里面值的所指向的地址是一样的,假如对象里面的值是可变对象,那么你对某一个对象进行修改时,原对象和新对象的值都会发生变化,试例如下:

a = [1, 2]
obj = [a, 'b', 'c']
new_obj = obj.copy()
print(new_obj)
new_obj[0].append(2)
print(new_obj)
print(obj)

[[1, 2], 'b', 'c']
[[1, 2, 2], 'b', 'c']
[[1, 2, 2], 'b', 'c']

a = [1, 2]
obj = ['a', 'b', 'c']
new_obj = obj.copy()
print(new_obj)
new_obj[0]='d'
print(new_obj)
print(obj)
['a', 'b', 'c']
['d', 'b', 'c']
['a', 'b', 'c']

所以我们在进行浅拷贝时要注意的是,拷贝的对象是否是可变变量,以及内部是否包含可变变量,当我们在进行不可变变量的浅拷贝时会觉得浅拷贝达到了深拷贝的效果,但是这是由于变量类型所导致。
这里再简单说下,python中的可变变量和不可变变量中的关系:
首先列举可变变量:list,dictionary
不可变变量:int,string,float,tuple
不可变量在进行新的值传递时,他会将原先的对象引用丢弃(python中垃圾回收),创建了新对象。
我们在开发过程中,如果需要继承dict该类的话,不能直接继承dict,我们可以使用collection 中UserDict。

python中set

首先python中集合对象set,fronzenset。
其中set为无序set和有序fronzenset。
set中加入新的元素,我们使用add,加入新的set使用update,两个set差集a-b为difference

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值