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

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

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

相关推荐
Just right2 分钟前
pycharm卡死在Connected to pydev debugger
ide·python·pycharm
2401_8877245011 分钟前
怎样使用Navicat高级特权进行从备份中提取单表数据_企业数据保护.txt
jvm·数据库·python
小飞象—木兮13 分钟前
《Power BI数据分析与可视化指南》:从概念到实操的全解析····(附相关材料下载)
大数据·人工智能·python·数据挖掘·数据分析
其实防守也摸鱼18 分钟前
dirsearch安装与配置:新手入门指南
网络·数据库·学习·学习方法·目录扫描·虚拟机工具
2402_8548083721 分钟前
如何用 stopPropagation 阻止事件冒泡防止触发父级回调
jvm·数据库·python
2301_7826591823 分钟前
Golang怎么实现方法集与接口的匹配_Golang如何理解值类型和指针类型实现接口的区别【详解】
jvm·数据库·python
蓝色的杯子24 分钟前
龙虾-OpenClaw一文详细了解-手搓OpenClaw-9 Skills系统
人工智能·python·openclaw·龙虾
AI视觉网奇24 分钟前
python 截取矩形 缩放,旋转
开发语言·python·numpy
2301_8148098626 分钟前
PHP源码开发用二手硬件划算吗_性价比与稳定性权衡【操作】
jvm·数据库·python
Yyyyy123jsjs26 分钟前
轻松通过Python调用外汇api获取汇率数据
开发语言·python