浅copy
data = {
"name":"chaoyang",
"age":"28",
"scores":{
"语文":130,
"数学":60,
"英语":98,
}
}
d = data
data["age"] = 20
print(d)
{'name': 'chaoyang', 'age': 20, 'scores': {'语文': 130, '数学': 60, '英语': 98}}
为何是20呢,因为d=data相当于只是拿到了data的内存地址,但data里的每个k,v都是有单独的内存的地址的。d,data会一直共享这个dict里的数据,不会出现像之前字符串a=1,b=a, a=2, b依然等于1的情况。
复制一份dict数据
>>> data
{'name': 'chaoyang', 'age': 20, 'scores': {'语文': 130, '数学': 60, '英语': 98}}
>>> d1 = data.copy()
>>> data["age"] = 22
>>> print(d1)
{'name': 'chaoyang', 'age': 20, 'scores': {'语文': 130, '数学': 60, '英语': 98}}
>>> print(data)
{'name': 'chaoyang', 'age': 22, 'scores': {'语文': 130, '数学': 60, '英语': 98}}
相当于有2份独立的数据了,但是修改scores的值
>>> data
{'name': 'chaoyang', 'age': 22, 'scores': {'语文': 130, '数学': 60, '英语': 98}}
>>> d2 = data.copy()
>>> data["age"] = 20
>>> data["scores"]["数学"] = 120
>>> data
{'name': 'chaoyang', 'age': 20, 'scores': {'语文': 130, '数学': 120, '英语': 98}}
>>> d2
{'name': 'chaoyang', 'age': 22, 'scores': {'语文': 130, '数学': 120, '英语': 98}}
两个dict的值是独立的,但score字典里的数据是共享的,故scores下的数据是共享一份的
深copy
复制两份完全独立的数据
>>> import copy
>>> data
{'name': 'chaoyang', 'age': 20, 'scores': {'语文': 130, '数学': 120, '英语': 98}}
>>> d2 = data.copy()
>>> d3 = copy.deepcopy(data)
>>> d3["scores"]["语文"] = 140
>>> print(data)
{'name': 'chaoyang', 'age': 20, 'scores': {'语文': 130, '数学': 120, '英语': 98}}
>>> print(d3)
{'name': 'chaoyang', 'age': 20, 'scores': {'语文': 140, '数学': 120, '英语': 98}}