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
|
a = [ 1 , 2 ] a[ 1 ] = a print (a[ 1 ])
|
当你的才华还撑不起你的野心的时候,你就应该静下心来学习;
当你的能力还驾驭不了你的目标时,就应该沉下心来历练。