Hans: > I have run into a bit of a subtle problem. How do I go about > duplicating a variable (particularly a list of lists) in python. I > was surprised when simple assignment didn't work.
Python is quite high-level language, but now and then it too accepts some compromises to increase its speed/size performance. Probably after Python someone will invent a language that may be slower than Python because it's higher level than Python, and avoids that problem you talk about (and other things). (And with a strategy of smart data sharing and copy-on-write the interpreter can avoid part of that overhead). > how do I go about duplicating a variable > which I can then manipulate independently? If your variable contains a list, then you can copy it like this: >>> l1 = [1, 2, 3] >>> l2 = l1[:] >>> l2[1] = 4 As you can see now they are two distinct lists: >>> l1 [1, 2, 3] >>> l2 [1, 4, 3] If you want to copy any kind of object you can use the copy function (instead of a simpler copy method that's absent): >>> d1 = {1:2, 3:4} >>> from copy import copy >>> d2 = copy(d1) >>> d1[1] = 5 >>> d1 {1: 5, 3: 4} >>> d2 {1: 2, 3: 4} But as you can see copy works only one level deep: >>> d3 = {1:[1], 3:4} >>> d3 {1: [1], 3: 4} >>> d4 = copy(d3) >>> d3[1][0] = 2 >>> d3 {1: [2], 3: 4} >>> d4 {1: [2], 3: 4} To copy all levels you need deepcopy: >>> from copy import deepcopy >>> d5 = deepcopy(d3) >>> d3[1][0] = 5 >>> d3 {1: [5], 3: 4} >>> d4 {1: [5], 3: 4} >>> d5 {1: [2], 3: 4} Bye, bearophile -- http://mail.python.org/mailman/listinfo/python-list