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
ApplyOperatorsL oop(bob[i][:]) #all the operators to each rule in
the list creating a new list of rules
bob = final
final = []
#end ApplySourceFunc ######
############### #########
def ApplyOperatorsL oop(aList):
iTemp = [] #initial temp, just for validity checking
iTemp = AddGetSpeed(aLi st[:])
if not iTemp == None: #if the operator returns None, then nothing of
value happend
final.append(iT emp)
#end ApplyOperatorsL oop####
############### ##########
def AddGetSpeed(tLi st):
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 ApplyOperatorsL oop 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 ApplyOperatorLo op 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