Python 似乎append()添加了变量,而不是它们的值
我正在读取一个具有“缺失”索引值的CSV文件(例如,1、2、4——缺失第三个索引)。我想用虚线填充空格,虚线有索引,其他变量为零。这是填充空格的代码(打印功能用于检查): 打印输出按预期显示行。但是在csv_raw中,第一列(索引)中的所有值都等于i的最后一个值,而不是调用append函数时的i。以下是输出: 打印虚拟行: [3,0,0][4,0,0][6,0,0][7,0,0][8,0,0][9,0,0] 打印csv_raw(在程序结束时): [1,1,1'],[2,2,2'],[9,0,0],[9,0,0],[5,3',, “3'],[9,0,0],[9,0,0],[9,0,0],[9,0,0],[10,4,4'] 我试图在每次循环后声明它将上升,但它并没有改变结果。我想了解如何解决这个问题以及为什么会发生。我想这与python的工作方式有关(我知道一些基本的C语言,但没有正式的python培训)Python 似乎append()添加了变量,而不是它们的值,python,python-2.7,append,Python,Python 2.7,Append,我正在读取一个具有“缺失”索引值的CSV文件(例如,1、2、4——缺失第三个索引)。我想用虚线填充空格,虚线有索引,其他变量为零。这是填充空格的代码(打印功能用于检查): 打印输出按预期显示行。但是在csv_raw中,第一列(索引)中的所有值都等于i的最后一个值,而不是调用append函数时的i。以下是输出: 打印虚拟行: [3,0,0][4,0,0][6,0,0][7,0,0][8,0,0][9,0,0] 打印csv_raw(在程序结束时): [1,1,1'],[2,2,2'],[9,0,0]
谢谢 问题在于,当您使用
csv\u raw.append(dummy\u row)
时,您没有附加dummy\u row
的副本。这意味着您每次都要添加对完全相同对象的引用,dummy\u row
更改时,csv\u raw
中的相应条目也会更改,因为它们都是相同的
您需要的是将dummy_row
的副本附加到csv_raw
。尝试以下操作:csv\u raw.append(列表(虚拟行))
将代码更改为
csv_raw.append(dummy_row[:])
将dummy_row
的完整切片(生成浅拷贝)附加到csv_raw
。目前,您只需将对同一列表的引用放入列表csv\u raw
演示正在发生的事情:
>>> master = []
>>> a = [1,2,3]
>>> master.append(a)
>>> master.append(a)
>>> master
[[1, 2, 3], [1, 2, 3]]
>>> a[1] = 42
>>> master
[[1, 42, 3], [1, 42, 3]]
master
包含对a
的两个引用,因此更改a
后,显示master
的输出也将更改
>>> master.append(a[:]) # append a COPY of a
>>> master
[[1, 42, 3], [1, 42, 3], [1, 42, 3]]
>>> a[1] = 100
>>> master
[[1, 100, 3], [1, 100, 3], [1, 42, 3]]
现在,master[0]
和master[1]
包含对同一对象的引用,该对象与master[2]
不同
>>> id(master[0])
41583032
>>> id(master[1])
41583032
>>> id(master[2])
41713816
哇!谢谢你的快速回答。它现在起作用了。很好地一场接一场地描述了在这种情况下发生的事情。
>>> id(master[0])
41583032
>>> id(master[1])
41583032
>>> id(master[2])
41713816