python-之-深浅拷贝一

时间:2021-10-24 19:53:51

深浅拷贝

一、数据为不可变类型 (str、int、bool) 

python-之-深浅拷贝一

python-之-深浅拷贝一python-之-深浅拷贝一
import copy

v1 = "abc"
v2 = copy.copy(v1)   
v3 = copy.deepcopy(v1)

print(v1 == v2)

print(v1 is v2) 
print(v1 is v3) 

输出结果:

True

True

True
View Code

 

小结:数据为不可变类型时,浅和深拷贝的值一样,且指向同一内存地址。(不考虑小数据池)

 

二、数据为可变类型 (list、set、dict) 

1、没有嵌套的情况

python-之-深浅拷贝一python-之-深浅拷贝一
import copy

v1 = [1,2,3,4,5]
v2 = copy.copy(v1)
v3 = copy.deepcopy(v1)

print(v1 == v2 == v3)

print(v1 is v2) 
print(v1 is v3) 

输出:

True

False

False
View Code

 

python-之-深浅拷贝一

 

 小结:没有嵌套的情况,深浅拷贝也是一样的,都拷贝第一层。

2、有嵌套的情况:

 

python-之-深浅拷贝一python-之-深浅拷贝一
import copy

v1 = [1,2,3, [4, 5, 6]]
v2 = copy.copy(v1)
v3 = copy.deepcopy(v1)

print(v1 == v2 == v3)

print(v1 is v2) 
print(v1 is v3) 

print(v1[3] is v2[3]) 
print(v1[3] is v3[3]) 
print(v2[3] is v3[3])

print(v1[3][0] is v2[3][0]) 
print(v1[3][0] is v3[3][0]) 
print(v2[3][0] is v3[3][0])

输出:

 

True
False
False
True
False
False
True
True
True
View Code

 

 python-之-深浅拷贝一

小结:在嵌套的情况下:

浅拷贝:拷贝第一层

深拷贝:拷贝嵌套下面所有可变类型

 

 

总结:

浅拷贝:只拷贝第一层

深拷贝:拷贝嵌套层次中的所有可变类型