Python(10)--字典--深浅复制

Posted mr-chenshuai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python(10)--字典--深浅复制相关的知识,希望对你有一定的参考价值。

映射:

  通过名称来访问值的数据结构

字典:

  字典是Python唯一的内置映射类型

  字典的值是无序的,存储在键下

  键可以是数、字符串、元组

  键必须是独一无二的


 

创建和使用字典:

  字典是由花括号{}括起来的键值对

  一个键值对为一项

  每隔键和值都用冒号:分隔

  项之间用逗号,分隔

  空字典用就是空的花括号表示

>>> phonebook = {"Bne": 123, "Yuan": 456, "Bone": 789}
>>> namebook = {}
>>> phonebook
{‘Bne‘: 123, ‘Yuan‘: 456, ‘Bone‘: 789}
>>> namebook
{}

  

函数dict:  

  可以使用dict函数从其他映射或者键值对序列创建字典

>>> items = [("name", "Yuan"), ("age", 23)]
>>> d = dict(items)
>>> d
{‘name‘: ‘Yuan‘, ‘age‘: 23}
>>> d["name"]
‘Yuan‘

# 还可以使用关键字参数
>>> d = dict(name="Yuan", age=23)
>>> d
{‘name‘: ‘Yuan‘, ‘age‘: 23}

  跟str、list、tuple一样,如果没有提供参数,dict返回的是一个空字典

>>> list()
[]
>>> str()
‘‘
>>> tuple()
()
>>> dict()
{}

  

字典操作:

# len(d)返回字典包含的项的数量
>>> d
{‘name‘: ‘Yuan‘, ‘age‘: 23}
>>> len(d)
2

# d[k]返回与键k相关联的值
>>> d
{‘name‘: ‘Yuan‘, ‘age‘: 23}
>>> d["age"]
23

# d[k] = v  将值v关联到k,若存在则修改,不存在则添加
>>> d
{‘name‘: ‘Yuan‘, ‘age‘: 23}
>>> d["name"] = "Bone"
>>> d
{‘name‘: ‘Bone‘, ‘age‘: 23}
>>> d["aaa"] = "song"
>>> d
{‘name‘: ‘Bone‘, ‘age‘: 23, ‘aaa‘: ‘song‘}

# del d[k] 删除键为k的项
>>> d
{‘name‘: ‘Bone‘, ‘age‘: 23, ‘aaa‘: ‘song‘}
>>> del d["aaa"]
>>> d
{‘name‘: ‘Bone‘, ‘age‘: 23}

# k in d 检查字典d是否包含键为k的项
>>> d
{‘name‘: ‘Bone‘, ‘age‘: 23}
>>> "name" in d
True
>>> "a" in d
False  
  • 键的类型:字典中的键可以使任何不可变的类型
  • 自动添加:给字典中没有的键赋值,就会在改字典中创建一个新的项
  • 成员资格:列表v in l 查找的是值,而字典的k in d 查找的是键不是值,通过找到键再检查相应的值

 


 

format_map:将字符串格式设置功能用于字典

  通过在字典中存储一系列命名的值,使得格式设置更简单

>>> phonebook
{‘Bne‘: 123, ‘Yuan‘: 456, ‘Bone‘: 789}
>>> "Yuan‘s phone number is {Yuan}".format_map(phonebook)
"Yuan‘s phone number is 456"

  


 

字典方法:

clear()        删除字段所有项

>>> d
{‘name‘: ‘Bone‘, ‘age‘: 23}
>>> d.clear()
>>> d
{}

  

copy()        返回一个副本,包含的项和原字典相同(浅复制)

>>> x = {"a": 123, "b": 444, "c": [1, 2, 6, "asd"]}
>>> y = x.copy()
>>> y["c"].remove("asd")
>>> y["a"] = "xxx"
>>> y
{‘a‘: ‘xxx‘, ‘b‘: 444, ‘c‘: [1, 2, 6]}
>>> x
{‘a‘: 123, ‘b‘: 444, ‘c‘: [1, 2, 6]}

# 这个方法执行的是浅复制,浅复制不会复制子对象,所以原始数据改变,子对象也会改变

  

deepcopy()      copy模块中的函数,执行深复制,同时复制值和其包含的所有值

>>> from copy import deepcopy
>>> x = {"c": [1, 2, 6, "asd"]}
>>> y = x.copy()
>>> z = deepcopy(x)
>>> x["c"].append("666")
>>> x
{‘c‘: [1, 2, 6, ‘asd‘, ‘666‘]}
>>> y
{‘c‘: [1, 2, 6, ‘asd‘, ‘666‘]}
>>> z
{‘c‘: [1, 2, 6, ‘asd‘]}

# 深复制,包含对象里面的子对象的复制,所以原始对象的改变不会造成深拷贝里任何子元素的改变

  

fromkeys(seq[, val])        返回一个字典,键都来自seq,值都为val(默认是None),可直接用dict调用

>>> {}.fromkeys(["name", "age"])
{‘name‘: None, ‘age‘: None}

# 上面先创建以个空字典然后调用方法来生成一个新字典,显然多余了,可以直接用dict调用

>>> dict.fromkeys(["name", "age"], "---")
{‘name‘: ‘---‘, ‘age‘: ‘---‘}
>>>

  

 get(key[, defaule])        访问字典的项,使用get访问不存在的键,不会报错,而是返回指定的defaule(默认是None)

>>> d
{}
>>> print(d["name"])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: ‘name‘
>>> print(d.get("name"))
None

  

items()        返回一个迭代器(实际是一个视图),包含字典的各项(key, value)对

>>> d = {"name": "Bone", "age": 25, "url": "www.python.org"}
>>> d.items()
dict_items([(‘name‘, ‘Bone‘), (‘age‘, 25), (‘url‘, ‘www.python.org‘)])

  

keys()        返回一个字典视图,包含字典的key

>>> d
{‘name‘: ‘Bone‘, ‘age‘: 25, ‘url‘: ‘www.python.org‘}
>>> d.keys()
dict_keys([‘name‘, ‘age‘, ‘url‘])

  

values()      返回一个字典视图,包含字典的value

>>> d
{‘name‘: ‘Bone‘, ‘age‘: 25, ‘url‘: ‘www.python.org‘}
>>> d.values()
dict_values([‘Bone‘, 25, ‘www.python.org‘])

  

pop(key[, d])        删除并返回给定键的值,并删除键值对

>>> d
{‘name‘: ‘Bone‘, ‘age‘: 25, ‘url‘: ‘www.python.org‘}
>>> d.pop("name")
‘Bone‘

  

popitem()        随机删除一项,并返回键值对

>>> d = {"name": "Bone", "age": 25, "url": "www.python.org"}
>>> d.popitem()
(‘url‘, ‘www.python.org‘)

  

setdefault(key[, default])        类似get,如果key存在就返回对应的值,不存在就添加到字典中

>>> d = {"name": "Bone", "age": 25, "url": "www.python.org"}
>>> d.setdefault("name")
‘Bone‘
>>> d.setdefault("aa")
>>> d
{‘name‘: ‘Bone‘, ‘age‘: 25, ‘url‘: ‘www.python.org‘, ‘aa‘: None}
>>> d.setdefault("aaa", "haha")
‘haha‘
>>> d
{‘name‘: ‘Bone‘, ‘age‘: 25, ‘url‘: ‘www.python.org‘, ‘aa‘: None, ‘aaa‘: ‘haha‘}

  

update(other)        使用一个字典的项来更新另一个字典

>>> d = {"name": "Bone", "age": 25, "url": "www.python.org"}
>>> x = {"x": 1, "y":2, "age": 18}
>>> d.update(x)
>>> d
{‘name‘: ‘Bone‘, ‘age‘: 18, ‘url‘: ‘www.python.org‘, ‘x‘: 1, ‘y‘: 2}
>>> x
{‘x‘: 1, ‘y‘: 2, ‘age‘: 18}

  

 



以上是关于Python(10)--字典--深浅复制的主要内容,如果未能解决你的问题,请参考以下文章

Python列表操作与深浅拷贝——列表深浅拷贝删除反转排序

python基础:元组字典深浅拷贝与函数

python 06 id is == set 深浅copy

Python中的深浅拷贝,赋值及引用

python深浅拷贝

python中的joinset集合深浅拷贝