Loading

python基础学习笔记——深浅拷贝

 

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
lst1 = ["⾦⽑狮王""紫衫⻰王""⽩眉鹰王""⻘翼蝠王"]
lst2 = lst1
print(lst1)
print(lst2)
lst1.append("杨逍")
print(lst1)
print(lst2)
结果:
['⾦⽑狮王''紫衫⻰王''⽩眉鹰王''⻘翼蝠王''杨逍']
['⾦⽑狮王''紫衫⻰王''⽩眉鹰王''⻘翼蝠王''杨逍']
 
 
dic1 = {"id"123"name""谢逊"}
dic2 = dic1
print(dic1)
print(dic2)
dic1['name'= "范瑶"
print(dic1)
print(dic2)
结果:
{'id'123'name''谢逊'}
{'id'123'name''谢逊'}
{'id'123'name''范瑶'}
{'id'123'name''范瑶'}

对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量. 并不是复制⼀份内容. 所以. lst1的内存指向和lst2是⼀样的. lst1改变了, lst2也发⽣了改变  

浅拷⻉

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
lst1 = ["何炅""杜海涛","周渝⺠"]
lst2 = lst1.copy()
lst1.append("李嘉诚")
print(lst1)
print(lst2)
print(id(lst1), id(lst2))
结果:
两个lst完全不⼀样. 内存地址和内容也不⼀样. 发现实现了内存的拷⻉
lst1 = ["何炅""杜海涛","周渝⺠", ["麻花藤""⻢芸""周笔畅"]]
lst2 = lst1.copy()
lst1[3].append("⽆敌是多磨寂寞")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3]))
结果:
['何炅''杜海涛''周渝⺠', ['麻花藤''⻢芸''周笔畅''⽆敌是多磨寂寞']]
['何炅''杜海涛''周渝⺠', ['麻花藤''⻢芸''周笔畅''⽆敌是多磨寂寞']]
4417248328 4417248328

浅拷⻉. 只会拷⻉第⼀层. 第⼆层的内容不会拷⻉. 所以被称为浅拷⻉

深拷⻉

1
2
3
4
5
6
7
8
9
10
11
import copy
lst1 = ["何炅""杜海涛","周渝⺠", ["麻花藤""⻢芸""周笔畅"]]
lst2 = copy.deepcopy(lst1)
lst1[3].append("⽆敌是多磨寂寞")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3]))
结果:
['何炅''杜海涛''周渝⺠', ['麻花藤''⻢芸''周笔畅''⽆敌是多磨寂寞']]
['何炅''杜海涛''周渝⺠', ['麻花藤''⻢芸''周笔畅']]
4447221448 4447233800

都不⼀样了.

深度拷贝. 把元素内部的元素完全进行拷贝复制. 不会产⽣⼀个改变另⼀个跟着 改变的问题 补充⼀个知识点:

最后我们来看⼀个⾯试题: 

1
2
3
= [12]
a[1= a
print(a[1])  

 

posted @ 2019-01-16 15:23  Ellisonzhang  阅读(197)  评论(0编辑  收藏  举报