Duplicating a variable
bearophileHUGS at lycos.com
bearophileHUGS at lycos.com
Thu Jan 24 12:55:46 EST 2008
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
More information about the Python-list
mailing list