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