[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>]