[Tutor] appending lists of objects
Jason Barbour
jbarbour@gladstone.ucsf.edu
Mon, 13 May 2002 12:02:50 -0700
Hello all,
I am having trouble appending a list of class objects.
I am using deepcopy on a list of objects which were successfully
created, but when I print out the list, I just get pointers
to the instantiation. Is there a way to get my append strategy
to work?
Thanks
Jason
class:
class ANN:
def __init__(self):
self.numero = None
self.inputs = []
self.weights = []
# or make bias as the last input, or first [0]
self.bias = None
# make a variable to store the 'true' answer
self.verdad = None
code:
def InitializeTopology(datalist, num_nodes):
# datalist is 'rawlist'
# num_nodes is 'hidden_nodes'
# take the length of the [0] element
# of datalist, where input data is kept
# to determine input unit number
input_units = len(datalist[0])
output_units = len(datalist[1])
# List which will hold the entire network
NN = [[]]
# Temp lists to append to NN
ent = []
out = []
hid = []
# NN example counter
j = 0
print datalist
# loop through each datalist element
for i in range(len(datalist)):
NN.append([])
# loop through input list within datalist element
ent = []
for e in (range(input_units)):
ent.append(datalist[i][e])
print "Input Nodes"
print ent
entx = copy.deepcopy(ent)
NN[j].append(entx)
# loop through desired hid node list and
# instantiate and append that number
hid = []
for h in (range(num_nodes)):
# hnode is a temp instantiation
hnode = ANN()
# set numero
hnode.numero = h
# add one extra for the bias node
for d in range(len(datalist[i][0])):
# set random weights
hnode.weights.append(GetRandom())
hid.append(hnode)
# this works fine
print "Hidden Node Weights"
print hid[h].weights
hidx = copy.deepcopy(hid)
NN[j].append(hidx)
# loop through output list within datalist element
out = []
for s in (range(output_units)):
# temp instantiation of node class
onode = ANN()
# set numero
onode.numero = s
# write 'true' value for this node in from datalist
onode.verdad = datalist[i][1]
# add one extra for the bias node
for hi in range(len(hid) + 1):
# set random weights
onode.weights.append(GetRandom())
ond = copy.deepcopy(onode)
out.append(ond)
print "Output Node Weights"
print out[s].weights
outx = copy.deepcopy(out)
NN[j].append(outx)
j = j + 1
# when I view the final list,
# i only see the pointers shown at the
# end of the output below
print NN
print NN[0][1]
return NN
output:
Input Nodes
[['0', '1', '0', '1', '0', '1'], ['1']]
Hidden Node Weights
[-0.018296596687270905, -0.081403175088918187, -0.053187146906907665,
0.056229649302163988, -0.075566267128166456, -0.022527181800035524]
Hidden Node Weights
[-0.0065363445994707451, 0.069861139620503818, 0.0024552409969152309,
0.076356456899948924, -0.069533002904092575, -0.014238828091323708]
Hidden Node Weights
[-0.075400889950218292, -0.050053122099344274, -0.0048485866459656354,
0.08662597642000594, -0.017859878096892778, 0.055191369394788102]
Output Node Weights
[0.037663575883956704, 0.039522195201120526, 0.052848206171747923, -
0.01037766943868983]
Output Node Weights
[-0.078275023370294267, 0.069305743921806412, 0.025268759536601591,
0.056177439285214084]
Input Nodes
[['1', '0', '1', '0', '1', '0'], ['0']]
Hidden Node Weights
[0.081712459684275235, -0.073062555492460518, -0.089030582658396876, -
0.080425085755549922, -0.05533052873035009, 0.0087849646658016093]
Hidden Node Weights
[-0.00023837933585462155, 0.097517550486271948, 0.090236482283893277,
0.089746470744624232, -0.014322076190345668, -0.050886396966472083]
Hidden Node Weights
[0.00011939214512719509, 0.040501166817123305, -0.095668774128323864,
0.078139479446892604, 0.08745296237997438, -0.018099444839937705]
Output Node Weights
[-0.027795386749378048, -0.015904567714063299, 0.069970274891191647, -
0.0051844350890069887]
Output Node Weights
[0.062263405185009335, -0.070228462857787652, -0.058050767060430421,
0.092388392928725957]
Input Nodes
[['0', '1', '1', '0', '1', '1'], ['1']]
Hidden Node Weights
[-0.014520789653509381, 0.050637826018312279, -0.096331315026787184, -
0.015789978617662914, -0.080072518921819588, 0.057655140839156793]
Hidden Node Weights
[0.077143949905593145, -0.052093418319049123, 0.021041221782613872, -
0.073784377429996467, 0.081250167691744937, -0.073069394523676903]
Hidden Node Weights
[0.079183132057173283, -0.064352582341993106, -0.047743468583672025,
0.056374150998905657, -0.089680772685834367, 0.093224700033546687]
Output Node Weights
[0.031468967429602215, 0.037860013704278585, 0.026289431822902287,
0.047595309078331482]
Output Node Weights
[0.022103436047705573, 0.080429621649877797, -0.032776026302476426, -
0.044834187905566168]
Input Nodes
[['1', '1', '0', '0', '1', '0'], ['0']]
Hidden Node Weights
[-0.09723932133933047, 0.082793639556330317, -0.014779765311136072,
0.05815203111935676, 0.093341660960959721, -0.041596612150172387]
Hidden Node Weights
[-0.033319581113907759, 0.035324831017861325, -0.093066597933479517,
0.055496245555570048, 0.067858476165719578, -0.066920463380311906]
Hidden Node Weights
[-0.0266917262783797, 0.051820006475687741, -0.0093643674736724417,
0.084802963987182942, 0.029095629325276783, -0.057989083104446948]
Output Node Weights
[-0.09894360261541886, -0.096914462031604504, 0.059415174380555588, -
0.0036597219717522389]
Output Node Weights
[-0.015256824879165975, 0.010845872845301941, -0.029854732686460394, -
0.070282855919804182]
[[[['0', '1', '0', '1', '0', '1'], ['1']], [<__main__.ANN instance at 0x02E02340
>, <__main__.ANN instance at 0x02E67500>, <__main__.ANN instance at 0x02E67150
>], [<__main__.ANN instance at 0x02E62B20>, <__main__.ANN instance at 0x02E641A0
>]], [[['1', '0', '1', '0', '1', '0'], ['0']], [<__main__.ANN instance at
0x02E12120>, <__main__.ANN instance at 0x02E13C40>, <__main__.ANN instance at
0x02E11360>], [<__main__.ANN instance at 0x02E654D0>, <__main__.ANN instance at
0x02E90EF0>]], [[['0', '1', '1', '0', '1', '1'], ['1']], [<__main__.ANN instance
at 0x02EA51E0>, <__main__.ANN instance at 0x02EA6EA0>, <__main__.ANN instance at
0x02EA6C10>], [<__main__.ANN instance at 0x02DF75A0>, <__main__.ANN instance at
0x02DF7390>]], [[['1', '1', '0', '0', '1', '0'], ['0']], [<__main__.ANN instance
at 0x02EB6F80>, <__main__.ANN instance at 0x02EB6D10>, <__main__.ANN instance at
0x02EB6A50>], [<__main__.ANN instance at 0x02DF53A0>, <__main__.ANN instance at
0x02E138F0>]], []]
[<__main__.ANN instance at 0x02E02340>, <__main__.ANN instance at 0x02E67500>,
<__main__.ANN instance at 0x02E67150>]