struct/test
var
val1 = 0
list/val2 = list(3, "heh", new/obj)
proc/Test()
var/struct/test
myStruct1 = new
myStruct2 = myStruct1
myStruct1.val1 = 1
// Now (myStruct1.val1 == 1)
// And (myStruct2.val1 == 0)
myStruct1.val2.Add(null)
// Now (myStruct1.val2 == list(3, "heh", a /obj, null))
// And (myStruct1.val2 == myStruct2.val2)
myStruct2.val2 = list()
// Now (myStruct1.val2 == list(3, "heh", a /obj, null))
// And (myStruct2.val2 == list())
As mentioned, the greatest advantage to these is the fact that they cannot be referenced, so you can use a virtually unlimited number of them at once.
Lummox JR