Python中列表操作函数append的浅拷贝问题
2022/2/7 1:14:56
本文主要是介绍Python中列表操作函数append的浅拷贝问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
L=int(input())#L位数 N=int(input())#N进制 row=[] list1=[] for i in range(1,N): row.append(1) list1.append(row) for i in range(1,L+1): row.clear() for n in range(N): if n==0: sum=sum(list1[i-1])-list1[i-1][n+1] row.append(sum) elif n==N-1: sum=sum(list1[i-1])-list[i-1][n-1] row.append(sum) else: sum=sum(list[i-1])-list[i-1][n-1]-list1[i-1][n+1] row.append(sum) print(list1) 问题起源:在做蓝桥杯练习时,发现上述代码运行时出现list index of range列表越界问题,在debug后发现是因为append函数的浅拷贝:list1在储存了row列表之后,再运行row.clear() 导致list1中数据被清空, 问题原理:在 Python 中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,Python 并没有拷贝这个对象,而只是拷贝了这个对象的引用,我们称之为浅拷贝。 append() 函数当 list 类型的对象进行 append 操作时,实际上追加的是该对象的引用。因此使用clear()函数时,把row列表清空的同时,也会把list1列表中的元素清空 解决方法:使用深拷贝:引入copy模块,使用deepcopy()方法,对应的 上述代码修改为list1.append(copy.deepcopy(row))
这篇关于Python中列表操作函数append的浅拷贝问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程