1 data = { 2 "name":"alex", 3 "age":18, 4 "scores":{ 5 "语文":130, 6 "数学":60, 7 "英语":98, 8 } 9 } 10 d2 = data 11 data["age"] = 20 12 print(d2)
执行结果:
{'name': 'alex', 'age': 20, 'scores': {'语文': 130, '数学': 60, '英语': 98}}
d2=data相当于只是拿到了data的内存地址,但data里的每个k,v都是有单独的内存地址的。所以d2和data会一直共享这个字典里的数据,不会出现像字符串a=1,b=a, a=2, b依然等于1的情况。
1 data = { 2 "name":"alex", 3 "age":18, 4 "scores":{ 5 "语文":130, 6 "数学":60, 7 "英语":98, 8 } 9 } 10 d2 = data.copy() 11 data["age"] = 20 12 data["scores"]["数学"] = 77 13 print(d2) 14 print(data)
执行结果:
{'name': 'alex', 'age': 18, 'scores': {'语文': 130, '数学': 77, '英语': 98}}
{'name': 'alex', 'age': 20, 'scores': {'语文': 130, '数学': 77, '英语': 98}}
注意!浅copy会仅复制dict的第一层数据,更深层的scores下面的值依然是共享一份
1 from copy import deepcopy 2 data = { 3 "name":"alex", 4 "age":18, 5 "scores":{ 6 "语文":130, 7 "数学":60, 8 "英语":98, 9 } 10 } 11 d2 = data.copy() 12 d3 = deepcopy(data) 13 14 data["age"] = 20 15 16 data["scores"]["数学"] = 77 17 print(d3) 18 print(data)
执行结果:
{'name': 'alex', 'age': 18, 'scores': {'语文': 130, '数学': 60, '英语': 98}}
{'name': 'alex', 'age': 18, 'scores': {'语文': 130, '数学': 77, '英语': 98}}
d3 和 data这2个dict完全独立,无论有多少层数据。