深浅拷贝

发布时间 2023-12-12 16:36:59作者: 蓝幻ﹺ

深浅拷贝

【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]]

深拷贝和浅拷贝在处理对象和数据结构时有不同的行为:

  • 深拷贝创建一个完全独立的对象,递归地复制所有嵌套对象。
  • 浅拷贝创建一个新对象,但它共享原始对象中可变对象的引用。