Мои желаемые данные - это значения в списках n_ac
, n_bc
и n_cd
, и я хотел бы каждый раз добавлять эти три списка в другие три списка, называемые copyn_ac
, copyn_bc
и copyn_cd
. Рассчитываю желаемые данные. Однако я обнаружил, что значение в copyn_ac
, copyn_bc
и copyn_cd
становится значениями в последнем добавленном списке, и поэтому все значения в copyn_ac
, copyn_bc
и copyn_cd
в конечном итоге становятся одинаковыми.
Вот часть моего кода (нерелевантный код был удален для более короткого сообщения):
def copy ():
print('Desired data:n_ac=',n_ac)
print('Desired data:n_bc=',n_bc)
print('Desired data:n_cd=',n_cd)
copyn_ac.append(n_ac)
copyn_bc.append(n_bc)
copyn_cd.append(n_cd)
def display_copyn ():
print('copyn_ac =', copyn_ac)
print('copyn_bc =', copyn_bc)
print('copyn_cd =', copyn_cd)
def start_1 (cell3):
for c in cell3:
c.save_n()
for c in cell3:
c.cal_init_val()
for c in cell3:
c.cal_alpha_S_R()
for c in cell3:
c.cal_y()
def start(cell3):
checking()
start_1(cell3)
copy()
def update (cell1,cell2,cell3):
checking() ### From Here ###
update_1(cell1)
update_2(cell2) ### Calculate the desired data ###
empty_list()
update_3(cell3) ### To Here ###
copy() ### copy desired data into other list
Когда я запускаю программу:
start(cell3)
display_copyn()
update(cell1,cell2,cell3)
display_copyn()
update(cell1,cell2,cell3)
display_copyn()
Вывод:
Desired data:n_ac= [33.33333333333334, 33.33333333333334]
Desired data:n_bc= [36.66666666666666, 36.66666666666666]
Desired data:n_cd= [70, 70, 70, 70, 70]
copyn_ac = [[33.33333333333334, 33.33333333333334]]
copyn_bc = [[36.66666666666666, 36.66666666666666]]
copyn_cd = [[70, 70, 70, 70, 70]]
Desired data:n_ac= [33.33333333333334, 33.33333333333334]
Desired data:n_bc= [36.66666666666666, 36.66666666666666]
Desired data:n_cd= [110.0, 30.0, 70.0, 70.0, 70.0]
copyn_ac = [[33.33333333333334, 33.33333333333334], [33.33333333333334, 33.33333333333334]]
copyn_bc = [[36.66666666666666, 36.66666666666666], [36.66666666666666, 36.66666666666666]]
copyn_cd = [[110.0, 30.0, 70.0, 70.0, 70.0], [110.0, 30.0, 70.0, 70.0, 70.0]]
Desired data:n_ac= [33.33333333333334, 33.33333333333334]
Desired data:n_bc= [36.66666666666666, 36.66666666666666]
Desired data:n_cd= [150.0, 30.0, 30.0, 70.0, 70.0]
copyn_ac = [[33.33333333333334, 33.33333333333334], [33.33333333333334, 33.33333333333334], [33.33333333333334, 33.33333333333334]]
copyn_bc = [[36.66666666666666, 36.66666666666666], [36.66666666666666, 36.66666666666666], [36.66666666666666, 36.66666666666666]]
copyn_cd = [[150.0, 30.0, 30.0, 70.0, 70.0], [150.0, 30.0, 30.0, 70.0, 70.0], [150.0, 30.0, 30.0, 70.0, 70.0]]
Ожидаемый результат после одной функции запуска и двух функций обновления:
copyn_ac = [[33.33333333333334, 33.33333333333334], [33.33333333333334, 33.33333333333334], [33.33333333333334, 33.33333333333334]]
copyn_bc = [[36.66666666666666, 36.66666666666666], [36.66666666666666, 36.66666666666666], [36.66666666666666, 36.66666666666666]]
copyn_cd = [[70, 70, 70, 70, 70],[110.0, 30.0, 70.0, 70.0, 70.0],[150.0, 30.0, 30.0, 70.0, 70.0]]
Что мне делать, чтобы получить ожидаемый результат?
Обновление: I сделал минимальный рабочий код для моей программы, и возникла та же проблема:
import numpy as np
data01=[]
copy_data=[]
class cell ():
def __init__ (self,number, parameter,index, data=0):
self.number = number
self.parameter = parameter
self.index = index
self.data = data
def cal_data(self):
self.data = np.minimum(self.number,self.parameter)
data01.append(self.data)
def change_val(self):
self.number = data01[self.index]*1.1*self.number
self.parameter = data01[self.index]*1.2*self.parameter
def save_data ():
copy_data.append(data01)
def empty_list():
del data01 [::]
c1 = cell(2,5,0)
c2 = cell(3,1,1)
cell_1 =[c1,c2]
def start01 (cell_1):
for c in cell_1:
c.cal_data()
def start (cell_1):
start01(cell_1)
save_data()
print(copy_data)
def update01(cell_1):
for c in cell_1:
c.change_val()
def update02(cell_1):
for c in cell_1:
c.cal_data()
def update(cell_1):
update01(cell_1)
empty_list()
update02(cell_1)
save_data()
print(copy_data)
Запустить программу:
start(cell_1)
update(cell_1)
update(cell_1)
Вывод:
[[2, 1]]
[[4.4, 1.2], [4.4, 1.2]]
[[21.296000000000006, 1.728], [21.296000000000006, 1.728], [21.296000000000006, 1.728]]