服务器学习网 > 编程学习 > python中的copy和deepcopy函数使用有啥不同?

python中的copy和deepcopy函数使用有啥不同?

服务器学习网综合整理   2025-02-06 10:21:35

copy函数:位于Python的copy模块中,它用于创建对象的浅拷贝。浅拷贝意味着,对于嵌套的对象(如列表中的列表),浅拷贝后的外层容器是新的,但内层容器仍然指向原来的对象。换句话说,浅拷贝只复制了容器本身,而没有复制容器内的对象。 deepcopy函数:同样位于copy模块中,它用于创建对象的深...

在Python编程中,处理数据复制是一个常见的需求。对于基本数据类型(如整数、浮点数、字符串等),赋值操作即可实现数据的“复制”。但对于复合数据类型(如列表、字典、集合等),简单的赋值操作实际上只是创建了一个新的变量指向原有的数据对象,而非创建一个全新的数据副本。这时,copydeepcopy函数就显得尤为重要了。

copy函数:位于Python的copy模块中,它用于创建对象的浅拷贝。浅拷贝意味着,对于嵌套的对象(如列表中的列表),浅拷贝后的外层容器是新的,但内层容器仍然指向原来的对象。换句话说,浅拷贝只复制了容器本身,而没有复制容器内的对象

deepcopy函数:同样位于copy模块中,它用于创建对象的深拷贝。深拷贝不仅会复制容器本身,还会递归地复制容器内的所有对象,直到所有层级的对象都被复制为止。因此,深拷贝后的对象与原对象是完全独立的,修改一个不会影响另一个

举个例子:

import copy

original_list = [1, [2, 3], 4]
shallow_copy = copy.copy(original_list)
deep_copy = copy.deepcopy(original_list)

# 修改浅拷贝中的嵌套列表
shallow_copy[1][0] = 'changed'

# 打印结果
print("Original list:", original_list)
print("Shallow copy:", shallow_copy)
print("Deep copy:", deep_copy)

python中的copy和deepcopy函数使用有啥不同?

你会发现,修改浅拷贝中的嵌套列表也会影响原列表,而深拷贝则不会。这就是copydeepcopy函数的核心区别所在。在实际编程中,选择使用哪个函数取决于你是否需要完全独立地复制一个复合数据类型及其所有嵌套对象。

推荐文章