[Tutor] Copying Variables

Steven D'Aprano steve at pearwood.info
Sun Jul 24 06:58:58 CEST 2011


Ryan Strunk wrote:
> Hello everyone,
> How can I make two copies of a dictionary that don't point to the same
> location in memory? My plan is to generate d1 and make d2 a copy of d1.
> After the user modifies d1 I want him/her to be able to return to the
> initial dictionary (d2) values. I tried:
> d1 = {values}

That can't work, because that makes a set, not a dict (in Python 3 at 
least). Perhaps you mean {key: value}, not just {value}?

> d2 = dict(d1)
> then later in the code when I want to re-initialize d1:
> d1 = dict(d2)
> but this won't work. Any suggestions you have as to how I can make this work
> are welcome.

Define "this won't work". What makes you think it doesn't work? This 
makes d2 a copy of d1, then makes d1 a copy of d2. They are different dicts.

My *guess* is that you're modifying the objects *inside* d1 and d2, 
which are shared. To make copies of *everything*, all the way down, use 
the copy module:

copy.copy  # makes a shallow copy, one level only
copy.deepcopy  # makes a deep copy, all the way down


-- 
Steven



More information about the Tutor mailing list