python——深拷贝与浅拷贝

浅拷贝: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]]

你可能感兴趣的:(python——深拷贝与浅拷贝)