Python - 字典(无序、复制、更新)

Python 版本:3.11.4

字典是“无序”的

字典是键值对的映射,即通过键就能找到值,无需考虑键值对的位置。

问:字典中有索引吗?

答:字典无序,即不存在索引,因此字典中不需要索引和切片。

复制

赋值是不是copy?

>>> a = 5
>>> b = 5
>>> id(a)
8885128
>>> id(b)
8885128

对整型数据赋值,是同一个值"贴不同标签“,a、b是5的不同标签。

copy

>>> d1 = {"name": "Jack", "lang":["python", "java", "c"]}
>>> d2 = d1.copy()
>>> d2
{'name': 'Jack', 'lang': ['python', 'java', 'c']}
>>> id(d1)                                       
139772632638144
>>> id(d2)
139772632690944

d2从d1拷贝过来,在内存中d1与d2是不同的对象

>>> d1["lang"].remove("c")
>>> d2
{'name': 'Jack', 'lang': ['python', 'java']}
>>> id(d1["lang"])
139772614109696
>>> id(d2["lang"])
139772614109696

d1,d2中的列表是同一个对象,因此d1修改列表时,d2的列表也会改变。

原因:Python只存储基本数据类型的数据,如int,str。对于非基础类型数据,如字典、列表,python不会在被复制的对象中重新存储,而是引用的方式

copy() 实现的拷贝称之为“浅拷贝”

deepcopy

>>> d2
{'name': 'Jack', 'lang': ['python', 'java']}
>>> import copy
>>> d3 = copy.deepcopy(d2)
>>> id(d3["lang"])
139772614089472
>>> id(d2["lang"])
139772614109696

deepcopy不是引用,而是直接创建“窝”。

Update

>>> d1 = {"name": "Jack", "lang":"python","age":18}
>>> d2 = {"school":"golden", "hometown":"Jiangsu"} 
>>> d1
{'name': 'Jack', 'lang': 'python', 'age': 18}
>>> d2                                       
{'school': 'golden', 'hometown': 'Jiangsu'}
>>> d2.update(d1)
>>> d2
{'school': 'golden', 'hometown': 'Jiangsu', 'name': 'Jack', 'lang': 'python', 'age': 18}
>>> d1
{'name': 'Jack', 'lang': 'python', 'age': 18}
>>> help(dict.update)
Help on method_descriptor:

update(...)
    D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
    If E is present and has a .keys() method, then does:  for k in E: D[k] = E[k]
    If E is present and lacks a .keys() method, then does:  for k, v in E: D[k] = v
    In either case, this is followed by: for k in F:  D[k] = F[k]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值