Python .append和.insert函数是否编辑插入列表中的对象?
当我运行上述代码时,我得到Python .append和.insert函数是否编辑插入列表中的对象?,python,python-3.x,Python,Python 3.x,当我运行上述代码时,我得到 oldrow = [1] for i in range(5): finaloutputlist.append(oldrow) print(oldrow) oldrow.append(0) oldrow.insert(0,0) j = i + 1 newrow = [] for i in range(len(oldrow) -1): #print(oldrow[i]) newrow.append(oldrow[
oldrow = [1]
for i in range(5):
finaloutputlist.append(oldrow)
print(oldrow)
oldrow.append(0)
oldrow.insert(0,0)
j = i + 1
newrow = []
for i in range(len(oldrow) -1):
#print(oldrow[i])
newrow.append(oldrow[i] + oldrow [i+1])
oldrow = newrow
print(finaloutputlist)
在这里,当我打印“oldrow”时,我得到的数组正好是我想要附加到finaloutputlist中的数组列表中的数组。但是,附加相同的oldrow会使我的最终输出行保持净额。出于某种原因,我在更新最终输出列表后添加的0似乎正在进入列表。感谢@jasonharper
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[[0, 1, 0], [0, 1, 1, 0], [0, 1, 2, 1, 0], [0, 1, 3, 3, 1, 0], [0, 1, 4, 6, 4, 1, 0]]
工作非常出色,无需额外导入。
finaloutputlist。追加(oldrow)
不追加oldrow
的副本,而是追加oldrow
本身-对该列表的任何后续修改都可以在finaloutplist
中看到。这可以通过finaloutputlist.append(oldrow.copy())
或finaloutputlist.append(oldrow[:])
或导入副本来修复;finaloutputlist.append(copy.deepcopy(oldrow))
取决于您的数据结构。但由于您的列表只包含int
,标准副本就足够了
finaloutputlist.append(oldrow.copy())