Problem Source: http://www.cnblogs.com/del/archive/2008/12/29/1230404.html#1416838
For example, there are two tstringlist objects: list1 and list2;
List2.assign (list1) is to copy the content of list1 to list2;
List2: = list1 is equivalent to giving list1 another name.
Example:
Unit unit1; interfaceuses windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs, stdctrls; Type tform1 = Class (tform) button1: tbutton; button2: tbutton; procedure button1click (Sender: tobject); Procedure button2click (Sender: tobject); end; var form1: tform1; implementation {$ R *. DFM} procedure tform1.button1click (Sender: tobject); var list1, list2: tstringlist; begin list1: = tstringlist. create; list2: = tstringlist. create; list1.commatext: = 'aaa, BBB, CCC '; list2.assign (list1); {at this time, list1 and list2 point to different objects respectively} showmessagefmt (' % s, % P ', [list1 [0], pointer (list1)]); {AAA, 00abaa40} showmessagefmt ('% s, % P', [list2 [0], pointer (list2)]); {AAA, 00abaa90} list1.free; showmessage (list2 [1]); {after list1 is released, list2 will still exist .} list2.free; end; Procedure tform1.button2click (Sender: tobject); var list1, list2: tstringlist; begin list1: = tstringlist. create; list1.commatext: = 'aaa, BBB, CCC '; list2: = list1; {at this time, list1 and list2 point to the same object} showmessagefmt (' % s, % P ', [list1 [0], pointer (list1)]); {AAA, 00abaa40} showmessagefmt ('% s, % P', [list2 [0], pointer (list2)]); {AAA, 00abaa40} list1.free; {the objects pointed to by list1 and list2 are released} // showmessage (list2 [1]); {so this sentence will cause an error} end; end.