Loading

python深浅copy

浅copy

例子1:

 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的情况。

例子2:

 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下面的值依然是共享一份

深copy

例子1:

 

 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完全独立,无论有多少层数据。

posted @ 2021-07-11 22:10  climber_dzw  阅读(36)  评论(0编辑  收藏  举报