python中列表嵌套拷贝--------深拷贝与浅拷贝

1、问题

对同一个列表进行拷贝,得到两个相同的列表,他们到底是不是同一个对象?

2、深浅拷贝

在Python中,有时我们需要复制一个对象,以便在不改变原始对象的情况下进行操作。Python提供了两种复制对象的方法:浅拷贝和深拷贝。

2.1浅拷贝

浅拷贝是指创建一个新对象,但是这个新对象只是原始对象的一个引用。也就是说,在新对象中,原始对象中的所有元素都只是引用。如果原始对象中的元素发生了变化,那么新对象中的元素也会发生变化。

2. 2深拷贝

深拷贝是指创建一个新对象,并且这个新对象与原始对象没有任何关联。也就是说,在新对象中,原始对象中的所有元素都被复制到了新的内存地址中。如果原始对象中的元素发生了变化,那么新对象中的元素不会受到影响。

3、深浅拷贝对list的影响

list不存在嵌套时,深浅拷贝对list来说都是一样的,

如果list存在嵌套,浅拷贝只拷贝一层,也就是说对嵌套元素的修改,会同时反映到所有的list上;深拷贝则拷贝所有嵌套的内容,也就是说对嵌套元素的修改,不会同时反映到所有的list上。看下面的代码:

复制代码
import copy

# 原始list
li = [11, 22, [33, 44]]
# 浅拷贝
li2 = li.copy()
# 深拷贝
li3 = copy.deepcopy(li)

# 修改原始list中嵌套的元素
li[2][0] = 55

# 输出原始list和浅拷贝后的list
print("Original list:", li)  # 输出 [11, 22, [55, 44]]
print("Shallow copy:", li2)   # 输出 [11, 22, [55, 44]]

# 输出深拷贝后的list
print("Deep copy:", li3)      # 输出 [11, 22, [33, 44]]

回到最初的问题,对同一个列表进行拷贝,得到两个相同的列表,他们到底是不是同一个对象?

首先答案是否定的,这两个相同的列表并不是相同的对象;但是如果列表中存在嵌套,则浅拷贝情况下,对嵌套元素的修改会反映到所有浅拷贝生成的对象上,不会影响深拷贝创建的对象。

相关推荐
try2find1 小时前
安装llama-cpp-python踩坑记
开发语言·python·llama
博观而约取2 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
ytttr8733 小时前
matlab通过Q学习算法解决房间路径规划问题
学习·算法·matlab
精灵vector3 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习4 小时前
Python入门Day2
开发语言·python
Vertira4 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉4 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗4 小时前
黑马python(二十四)
开发语言·python
晓13135 小时前
OpenCV篇——项目(二)OCR文档扫描
人工智能·python·opencv·pycharm·ocr
是小王同学啊~5 小时前
(LangChain)RAG系统链路向量检索器之Retrievers(五)
python·算法·langchain