python浅拷贝和深拷贝

时间:2021-08-12 22:46:11

copy模块中有 浅拷贝深拷贝 两种方法

1. 浅拷贝:

浅拷贝只拷贝外层列表 内层列表跟随原列表进行改变

浅拷贝copy.copy(var) 或者 var.copy()

2. 深拷贝:

拷贝整个列表 内外列表都不跟随原列表进行改变

深拷贝copy.deepcopy(var)

注意: copy 模块的 copy 函数和 python 内置的 copy 函数一样都是浅拷贝

例子: 

1.  python内置的copy函数

# 浅拷贝 只拷贝一级所有元素
# lst2 = lst1
lst1 = [1, 2, 3, [4, 5, 6]]
lst2 = lst1.copy()
lst1[-1].append(7)
print(lst1)
print(lst2)

执行结果:

[1, 2, 3, [4, 5, 6, 7]]
[1, 2, 3, [4, 5, 6, 7]]

  

2. 使用模块进行浅拷贝操作

# 使用 copy 模块中的 copy 方法进行浅拷贝操作
import copy
lst1 = [1, 2, 3, [4, 5, 6]]
lst2 = copy.copy(lst1)
lst1[-1].append(7)
print(lst1)
print(lst2)

 执行结果:

[1, 2, 3, [4, 5, 6, 7]]
[1, 2, 3, [4, 5, 6, 7]]

 

3.  深拷贝

# 深拷贝 将所有级别的元素统统独立拷贝一份
'''每一级的所有元素通通拷贝一份,不沿用以前的数据'''
# import 引入 copy 模块 deepcopy 深拷贝
import copy
lst1 = [1, 2, 3, [4, 5, 6]]
lst2 = copy.deepcopy(lst1)
lst1[-1].append(7)
print(lst1)
print(lst2)

 执行结果:

[1, 2, 3, [4, 5, 6, 7]]
[1, 2, 3, [4, 5, 6]]

 

 4.切片得到的列表属于什么拷贝

# 使用列表的切片实现浅拷贝, 不能实现深拷贝
lst1 = [1, 2, 3, [4, 5]]
lst2 = lst1[:]
lst1[-1].append(6)
print(lst1)
print(lst2)

执行结果:

[1, 2, 3, [4, 5, 6]]
[1, 2, 3, [4, 5, 6]]