深浅拷贝
深浅拷贝
【1】浅拷贝
- 浅拷贝仅复制对象的一层内容,如果对象中包含了可变数据类型(如列表、字典等),则拷贝的对象将与原对象共享这些可变数据类型的引用。
- 这意味着对于原对象中的可变数据类型进行修改操作时,拷贝的对象也会受到影响。
import copy
# 原对象
list = [1, 2, [3, 4]]
# 使用浅拷贝创建拷贝对象
copy_list = copy.copy(list)
# 修改原对象中的可变数据类型
list[2].append(5)
print("原对象:", list) #原对象: [1, 2, [3, 4, 5]]
print("拷贝对象:", copy_list) #拷贝对象: [1, 2, [3, 4, 5]]
【2】深拷贝
- 深拷贝会创建一个完全独立的新对象,包括所有的嵌套对象。
- 无论原对象的数据类型是可变还是不可变,深拷贝都会创建出新的对象,以后对原对象的修改不会影响到拷贝对象。
import copy
# 原对象
list = [1, 2, [3, 4]]
# 使用深拷贝创建拷贝对象
copy_list = copy.deepcopy(list)
# 修改原对象中的可变数据类型
list[2].append(5)
print("原对象:", list) #原对象: [1, 2, [3, 4, 5]]
print("拷贝对象:", copy_list) #拷贝对象: [1, 2, [3, 4]]
from copy import deepcopy
list = [1, 2, 3, [4, 5, 6, ]]
list_d_copy = deepcopy(list)
list_d_copy[3][1] = 555
print(list) # [1, 2, 3, [4, 5, 6]]
print(list_d_copy) # [1, 2, 3, [4, 555, 6]]
深拷贝和浅拷贝在处理对象和数据结构时有不同的行为:
- 深拷贝创建一个完全独立的对象,递归地复制所有嵌套对象。
- 浅拷贝创建一个新对象,但它共享原始对象中可变对象的引用。