TList.copy

BlitzMax Forums/BlitzMax Beginners Area/TList.copy

Volker(Posted 2008) [#1]
Hi,
changing a value in the copy of a list does
the same in the soruce list?
Does TList.copy only create a new reference?
I am really confused:

Type Test
	Field one:Int = 1
End Type

' create a new list
Local mylist:TList = CreateList() 
' create an object Test with one=1
t:Test = New Test
DebugLog (t.one) 
' add it to list mylist
mylist.AddLast(t) 

' create a new list
Local mylistcopy:TList = CreateList() 
' and fill it with a copy of mylist
 mylistcopy = mylist.copy() 
 
 ' Change value of t.one in copy of mylist
For Local lp:Test = EachIn mylistcopy
	lp.one = 5
Next

' Now the value in mylist is changed to 5 ???
For Local lpp:Test = EachIn mylist
	DebugLog (lpp.one) 
Next



Dreamora(Posted 2008) [#2]
Copy generates a new list with the same content (-> new TLinks as well!)


Brucey(Posted 2008) [#3]
changing a value in the copy of a list does the same in the soruce list?

Correct.
The objects inside the copied list are the same objects from the source list.
You will need to implement your own object "clone" system to create completely new objects in your target list.
Search the forum for "clone". I believe there are some code-examples which use reflection.


Volker(Posted 2008) [#4]
While reading your anwer I came a bit nearer to
my confusion.
I wanted to clone a list and the objects in there to
manipulate them without changing the original objects.

But cloning a list only duplicates the references to the
objects.
So changing values of objects in one list changes
the values in the other list too of course.

Can anyone follow :-) ?

So what I really need is a copy of the objects.
Hm, Reflection?


Volker(Posted 2008) [#5]
Ahhh, a bit faster next time Brucey. :-)


Brucey(Posted 2008) [#6]
:-)

Some more info here.


Volker(Posted 2008) [#7]
Thanks for your anwers folks!