自学内容网 自学内容网

python中深拷贝和浅拷贝的区别

目录

一、浅拷贝 (Shallow Copy)

二、深拷贝 (Deep Copy)

三、使用场景


在Python中,拷贝机制用于创建已存在对象的新实例。根据复制方式的不同,可以分为浅拷贝(shallow copy)和深拷贝(deep copy)。这两种拷贝机制的区别在于如何处理对象中的引用类型。

一、浅拷贝 (Shallow Copy)

浅拷贝会创建一个新的对象,这个对象有着从原对象中获得的所有属性值的副本。如果对象的属性是基本数据类型(如数字、字符串),那么这些属性会被直接复制到新对象中;但如果属性是引用类型(如列表、字典、对象等),则只复制该引用类型对象的引用,而不是实际的对象本身。

这意味着,对于浅拷贝后的两个对象,如果其中一个对象的引用类型属性发生了变化,另一个对象的相应属性也会受到影响。

示例:

import copy

original = [1, 2, [3, 4]]
shallow_copy = copy.copy(original)

original[2].append(5)  # 修改原始列表中的子列表
print(original)         # 输出: [1, 2, [3, 4, 5]]
print(shallow_copy)     # 输出: [1, 2, [3, 4, 5]]

 运行结果:

二、深拷贝 (Deep Copy)

深拷贝不仅会创建一个新的对象,还会递归地拷贝原对象中的所有子对象,这样就使得新对象和原对象完全独立。即使在原对象中的引用类型属性发生变化,也不会影响到深拷贝后的新对象。

示例:

import copy

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

original[2].append(5)  # 修改原始列表中的子列表
print(original)         # 输出: [1, 2, [3, 4, 5]]
print(deep_copy)        # 输出: [1, 2, [3, 4]]

运行结果: 

三、使用场景

  • 当你需要创建一个对象的拷贝,而这个拷贝需要与原对象完全独立时,应该使用深拷贝
  • 如果拷贝的对象不包含引用类型,或者你不需要完全独立的拷贝,则可以使用浅拷贝,因为浅拷贝通常比深拷贝效率更高。

在实际应用中,选择哪种拷贝方式取决于你的具体需求。如果你需要确保复制的对象之间没有任何关联,特别是在涉及复杂对象或嵌套对象时,深拷贝通常是更好的选择。


原文地址:https://blog.csdn.net/qq_41797451/article/details/142979535

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!