Python 为什么我的名单是';是否将每个成员变量的值更改为新变量?
在我的函数中,我创建了要添加到列表中的唯一变量。但每当我附加下一个变量时,列表中所有其他变量的值都会更改为新变量 这是我的密码:Python 为什么我的名单是';是否将每个成员变量的值更改为新变量?,python,append,Python,Append,在我的函数中,我创建了要添加到列表中的唯一变量。但每当我附加下一个变量时,列表中所有其他变量的值都会更改为新变量 这是我的密码: def make_list_of_data_transfer_objects(iFile, eFile, index_of_sheet): iBook = open_workbook(iFile) iSheet = iBook.sheet_by_index(0) eBook = open_workbook(eFile) eSheet
def make_list_of_data_transfer_objects(iFile, eFile, index_of_sheet):
iBook = open_workbook(iFile)
iSheet = iBook.sheet_by_index(0)
eBook = open_workbook(eFile)
eSheet = eBook.sheet_by_index(index_of_sheet)
DataSet = namedtuple('DataSet', 'line_num data_list')
list_objects = []
temp_line_num = 99999
temp_data = [0]*5
for row_index in range(eSheet.nrows):
temp_data[0] = eSheet.cell(row_index,0).value
temp_data[1] = eSheet.cell(row_index,1).value
temp_data[2] = eSheet.cell(row_index,2).value
temp_data[3] = eSheet.cell(row_index,3).value
temp_data[4] = eSheet.cell(row_index,4).value
for row_index2 in range(iSheet.nrows):
if temp_data[0] == iSheet.cell(row_index2,0).value:
temp_line_num = row_index2
temp_object = DataSet(temp_line_num, temp_data)
list_objects.append(temp_object)
#print list_objects #every object is the same
list_objects.sort(key = lambda tup: tup[0]) #sort by line number
return list_objects
改变
到
或
通过将
temp_数据
传递到数据集
,您不需要创建列表的副本,只需重新使用现有的副本即可。通过使用[:]
或list()
您可以创建一个副本。实际上temp\u对象
是一个数据集(无论是什么);相反,我认为OP需要将temp\u object=DataSet(temp\u line\u num,temp\u data)
更改为temp\u object=DataSet(temp\u line\u num,temp\u data[:])
。(或者更改数据集
构造函数,在其第二个参数中复制数据)@EdwardLoper:是的,从臀部开始拍摄。很好,更新了。
temp_object = DataSet(temp_line_num, temp_data)
temp_object = DataSet(temp_line_num, temp_data[:])
temp_object = DataSet(temp_line_num, list(temp_data))