python——深拷贝与浅拷贝

当一个变量a=1的时候 约定为:变量a指向存储1的内存地址的过程

浅拷贝:copy.copy()
深拷贝:copy.deepcopy()

import  copy      ##导入拷贝模块 
a = [1,2]          
b = [3,4]          
c = (a,b)          
d = copy.copy(c)   
print(id(c))       
print(id(d))       
print(id(a))       
print(id(c[0]))    
print(id(d[0]))    

结果:
139704810140448
139704810140448 ##没有开辟新的内存地址,仅仅时指向
139704810223088
139704810223088
139704810223088
import  copy    
a = [1,2]          
b = [3,4]          
c = (a,b)          
d = copy.deepcopy(c)   
print(id(c))       
print(id(d))       
print(id(a))       
print(id(c[0]))    
print(id(d[0]))    

结果:
2653642211016 
2653642282632
2653642228552
2653642228552
2653643684744

元组不能进行浅拷贝,仅仅是指向,元组深拷贝是开辟新的内存地址空间与其他类型的深拷贝相同(一般的浅拷贝和深拷贝都需要开辟新的内存地址)
元组是不可变数据类型,意味着数据一定不能修改
因此它会自动判断为指向

import  copy    
a = [1,2]          
b = [3,4]          
c = [a,b]         
d = copy.deepcopy(c)   
h = copy.copy(c)
print(id(c))       
print(id(d)) 
print(id(h))   
   
print(id(a))       
print(id(c[0]))    
print(id(d[0]))  
print(id(h[0]))  

结果:
 2653643755912
 2653643684680
 2653643684744
 2653642228552
 2653643755848
 2653642228552

列表的浅拷贝和深拷贝都是开辟新的内存地址空间 浅拷贝只是外壳的地址空间发生改变 深拷贝由里到外地址空间都发生改变

浅拷贝可以拷贝到之后追加的元素 深拷贝不能

import  copy               
a = [1,2]                  
b = [3,4]                  
c = [a,b]                  
d = copy.copy(c)  
a.append([5])              
print(c)                   
print(d)                   

[[1, 2, [5]], [3, 4]]
[[1, 2, [5]], [3, 4]]
import  copy        
a = [1,2]           
b = [3,4]           
c = [a,b]           
d = copy.deepcopy(c)
a.append([5])       
print(c)            
print(d)            

[[1, 2, [5]], [3, 4]]
[[1, 2], [3, 4]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值