python里面的浅拷贝和深拷贝

目录

浅拷贝(shallow copy)和深拷贝(deep copy)是在 Python 中复制对象时的两种不同方式。

浅拷贝(Shallow Copy):

1.浅拷贝创建了一个新的对象,但是其中的元素仍然是原始对象中元素的引用

2.对于容器对象(例如列表、字典等),浅拷贝只会拷贝容器中的元素的引用,而不会递归地复制内部的对象。

3.如果原始对象中包含的是可变对象(例如列表),那么浅拷贝的结果会受到原始对象的影响,因为它们共享相同的引用。

4.在浅拷贝中,只有第一层的对象是新创建的,而其中的嵌套对象依然是共享的。

总结,浅拷贝的时候其实还是同一个对象,不同的拷贝副本只是对同一个对象的不同的称呼

深拷贝(Deep Copy):

  • 深拷贝创建了一个新的对象,并且递归地复制了所有嵌套对象,而不是只复制引用。(这里的嵌套是针对结构体类型的复杂变量)
  • 即使原始对象中包含的是可变对象,深拷贝的结果也不会受到原始对象的影响,因为它们是完全独立的。
  • 深拷贝会递归地复制所有嵌套对象,以保证所有层级的对象都是独立的。

实现方式:

浅拷贝可以使用copy模块中的copy()函数来实现。

深拷贝可以使用copy模块中的deepcopy()函数来实现。

使用copy模块进行拷贝:

python 复制代码
import copy

# 浅拷贝
new_list = copy.copy(original_list)

# 深拷贝
new_list = copy.deepcopy(original_list)

使用切片(只适用于列表和其他序列类型)进行浅拷贝:

python 复制代码
# 浅拷贝
new_list = original_list[:]

# 浅拷贝(对于字典)
new_dict = original_dict.copy()

使用list()、dict()等构造函数进行浅拷贝:

python 复制代码
# 浅拷贝
new_list = list(original_list)

# 浅拷贝(对于字典)
new_dict = dict(original_dict)

总的来说,浅拷贝和深拷贝的选择取决于你的需求。如果你只需要一个新对象来引用原始对象的元素,可以使用浅拷贝。但如果你需要一个完全独立的副本,不受原始对象的影响,那么就需要使用深拷贝。

使用等号进行浅拷贝

在Python中,使用等号(=)创建的对象之间共享相同的引用 ,因此这种方式是浅拷贝。这意味着,如果你使用等号将一个对象分配给另一个变量,两个变量实际上引用的是相同的对象,而不是创建对象的副本。

例如:

python 复制代码
original_list = [1, 2, 3]
new_list = original_list  # 使用等号,new_list和original_list共享相同的对象


# 修改new_list会影响original_list
new_list.append(4)
print(original_list)  # 输出: [1, 2, 3, 4]

在这个示例中,new_list和original_list实际上引用相同的列表对象,因此对其中一个列表的修改会影响另一个列表。

如果你想要创建一个完全独立的对象副本,以避免原始对象的影响,你应该使用浅拷贝或深拷贝的方式,而不是直接使用等号分配。

相关推荐
写后端的胖头鱼3 分钟前
【高频面试题】Java 基础类型 + 包装类 + String 互相转换
java·开发语言
matlab代码26 分钟前
基于matlab自助水果超市水果识别收费系统(GUI界面)【源码67期】
开发语言·matlab
hui-梦苑41 分钟前
[PHP]轻量主题函数WordPress 集成 KaTeX 数学公式渲染
开发语言·php·wordpress·katex
2601_962099461 小时前
Python中的find()函数:用法和示例
python·字符串·索引·子字符串·find函数
大圣编蚕1 小时前
Java StringWriter 详解:从入门到实战
java·开发语言·python
码行山野赴时序归途1 小时前
C语言预处理指令:编译前的“幕后导演“
c语言·开发语言
golang学习记1 小时前
Go 1.27新特性: json/v2使用有趣指南
开发语言·golang·json
老苗项目实战2 小时前
Java工程师高频面试题(基于近一年的真实面试记录整理)
java·开发语言·面试·预见猿份·老苗项目实战
小小、码农2 小时前
C++11右值引用与移动语义 —— 从拷贝资源到转移资源
开发语言·网络·c++·网络协议
for_ever_love__2 小时前
python基础语法学习: requirements.txt
开发语言·python·学习