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-02Python编程基础
- 2024-11-01Python 基础教程
- 2024-11-01用Python探索可解与不可解方程的问题
- 2024-11-01Python编程入门指南
- 2024-11-01Python编程基础知识
- 2024-11-01Python编程基础
- 2024-10-31Python基础入门:理解变量与数据类型
- 2024-10-30Python股票自动化交易资料详解与实战指南
- 2024-10-30Python入行:新手必读的Python编程入门指南
- 2024-10-30Python入行:初学者必备的编程指南