I've hit a brick wall on something that I'm guessing is pretty simple but
it's driving me nuts. I noticed that with python lists, generally when you
make a copy of a list (ie, List1 = List2) List1 just becomes a reference to
List2 and any modifications done to List1 affects List2. Ok I can live with
this but I want to make a completely seperate copy not attached to the
original in anyway. So then I used this method. List1 = List2[:]  .  This
seemed to work in most situations, here I can modifiy List1 with out it
affecting List2. But now I've run into an odd problem, and I have no idea
why it's doing what it's doing.
Here's some code

#some globle varibles
bob = [[[0, 0]]]
final = []

########################
def ApplySourceFunc(bob, final):
    for I in range(1):

        for I in range(len(bob)): #will go through the list and apply
            ApplyOperatorsLoop(bob[I][:]) #all the operators to each rule in
the list creating a new list of rules

        bob = final
        final = []
#end ApplySourceFunc######

########################
def ApplyOperatorsLoop(aList):

    iTemp = [] #initial temp, just for validity checking

    iTemp = AddGetSpeed(aList[:])
    if not iTemp == None: #if the operator returns None, then nothing of
value happend
        final.append(iTemp)

#end ApplyOperatorsLoop####

#########################
def AddGetSpeed(tList):
    ln = len(tList) #get the length of tList

    if ln > 0:
        if tList[ln-1][0] == 0:
           tList[ln-1][0] = "GetSpeed()"
            print "New Rule 'GetSpeed()' Added to the List"
            return tList
    return None
#end AddGetSpeed#########

So, here's what going on. ApplySourceFunc calls ApplyOperatorsLoop which
calls AddGetSpeed. Each function passes the list bob to the next fuction
using the [:] method. For some reason when I get to the AddGetSpeed method
and I do the assignment " tList[ln-1][0] = "GetSpeed()" " this directly
modifies the list bob. Ok, so i was annoyed by that since I was using the
whole [:] method as I passed and used the lists. Then I tried to insert a
temp list into the ApplyOperatorLoop function ( temp2 = aList[:]) and then
pass that into AddGetSpeed. Even when I did this AddGetSpeed modified the
orginial bob list. so, what I'm getting down to is:
    How on earth can I make a complete seperate copy of a list with out it
being a attached to the original in any way shape or form so that I can
modifiy if at will and not worry about the original? I've tried every
combonation that I can think of to get this to work, I even wrote my own
copy function but even then I had the same trouble. Until this point
everything was going good, but this has really bugged me

Any ideas, suggestions, comments are greatly appreciated
thanks

Nick


-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to