Deeper copy than deepcopy
Cameron Simpson
cs at zip.com.au
Tue Oct 27 17:43:09 EDT 2009
On 28Oct2009 08:23, I wrote:
| | I wanted to wind up with r being [[1, 2, 3], [1, 2, 999], [1, 2, 3]].
| | What's the right way to construct r as a list of *independent* d lists?
|
| Well, you would need to write your own. But consider this:
| x = [1, 2]
| x.append(x)
| Your deepercopy() function will explode.
I've thought of a comprimise that would work automatically: deepcopy
tracks all the objects in the structure and replicates their multiple
uses. For your purposes, you could write a version of deepcopy that did
a depth-first recursion and only tracked the ancestor objects.
That way the above x.append(x) recursive list would not duplicate the
inner "x", but an "x" in two subbranches of a structure _would_ be
replicated i.e. this:
x = [1,2]
y = [x, x]
would get two independent "x"s.
However, it would still mean a recursive structure would get non-independent
"x"s. Which is necessary to avoid an infinite copy but breaks your
requirement.
--
Cameron Simpson <cs at zip.com.au> DoD#743
http://www.cskk.ezoshosting.com/cs/
Every technical corrigendum is met by an equally troublesome new defect report.
- Norman Diamond <diamond at jit.dec.com>
More information about the Python-list
mailing list