Python嵌套列表的浅拷贝与深拷贝

Python嵌套列表的浅拷贝与深拷贝

所谓浅拷贝,是指仅拷贝父对象,而不会拷贝子对象。代码中的a列表属于嵌套列表。

在Python中,嵌套列表(二维列表或更高维度的列表)的拷贝行为可以通过浅拷贝(shallow copy)和深拷贝(deep copy)来区分。这两种拷贝方式在处理包含可变对象的列表时尤为重要。

浅拷贝(Shallow Copy)

浅拷贝会创建一个新的列表对象,但是列表中的元素(如果它们是可变对象,如列表、字典等)仍然是原始对象的引用,即a[0]的地址和b[0]的地址是相同的,a[1]的地址和b[1]的地址是相同的。这也意味着,如果你修改了浅拷贝中某个可变对象(例如b[4])的元素,原始对象(a[4])中的相应元素也会被修改。

但是如果直接将原始对象的引用给修改了的话,则不会影响旧的数组。题主运行下下面这一段代码应该就理解了。

python 复制代码
import copy
a = [1,2,3,4,[5,6,7]]
b = copy.copy(a)
print(id(a[0]))
print(id(b[0]))
print(id(a[3]))
print(id(b[3]))

b[4][0] = 9
print(a)
print(b)
print(id(a[4]))
print(id(b[4]))

b[4] = 9
print(id(a[4]))
print(id(b[4]))

运行结果

复制代码
4368151552
4368151552
4368151648
4368151648
[1, 2, 3, 4, [9, 6, 7]]
[1, 2, 3, 4, [9, 6, 7]]
140684883504264
140684883504264
140684883504264
4368151808

参考文献

【1】 https://blog.csdn.net/weixin_45720999/article/details/141391719

相关推荐
QxQ么么1 天前
移远通信(桂林)26校招-助理AI算法工程师-面试纪录
人工智能·python·算法·面试
执笔论英雄1 天前
Slime异步原理(单例设计模式)4
开发语言·python·设计模式
e***74951 天前
Modbus报文详解
服务器·开发语言·php
lly2024061 天前
ASP 发送电子邮件详解
开发语言
小徐敲java1 天前
python使用s7协议与plc进行数据通讯(HslCommunication模拟)
开发语言·python
likuolei1 天前
XSL-FO 软件
java·开发语言·前端·数据库
6***37941 天前
PHP在电商中的BigCommerce
开发语言·php
猫头虎1 天前
如何解决 pip install 编译报错 fatal error: hdf5.h: No such file or directory(h5py)问题
人工智能·python·pycharm·开源·beautifulsoup·ai编程·pip
Dev7z1 天前
基于Matlab的多制式条形码识别与图形界面(GUI)系统设计与实现
开发语言·matlab
合作小小程序员小小店1 天前
桌面开发,在线%信息管理%系统,基于vs2022,c#,winform,sql server数据。
开发语言·数据库·sql·microsoft·c#