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 = lst1print(lst1)print(lst2)lst1.append("杨逍")print(lst1)print(lst2)结果:['⾦⽑狮王', '紫衫⻰王', '⽩眉鹰王', '⻘翼蝠王', '杨逍']['⾦⽑狮王', '紫衫⻰王', '⽩眉鹰王', '⻘翼蝠王', '杨逍']dic1 = {"id": 123, "name": "谢逊"}dic2 = dic1print(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 copylst1 = ["何炅", "杜海涛","周渝⺠", ["麻花藤", "⻢芸", "周笔畅"]]lst2 = copy.deepcopy(lst1)lst1[3].append("⽆敌是多磨寂寞")print(lst1)print(lst2)print(id(lst1[3]), id(lst2[3]))结果:['何炅', '杜海涛', '周渝⺠', ['麻花藤', '⻢芸', '周笔畅', '⽆敌是多磨寂寞']]['何炅', '杜海涛', '周渝⺠', ['麻花藤', '⻢芸', '周笔畅']]4447221448 4447233800 |
都不⼀样了.
深度拷贝. 把元素内部的元素完全进行拷贝复制. 不会产⽣⼀个改变另⼀个跟着 改变的问题 补充⼀个知识点:
最后我们来看⼀个⾯试题:
|
1
2
3
|
a = [1, 2]a[1] = aprint(a[1])
|
当你的才华还撑不起你的野心的时候,你就应该静下心来学习;
当你的能力还驾驭不了你的目标时,就应该沉下心来历练。

浙公网安备 33010602011771号