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
=  [ 1 2 ]
a[ 1 =  a
print (a[ 1 ])  

 

转载于:https://www.cnblogs.com/ellisonzhang/p/10221878.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值