copy.deepcopy(): is it bug or intended behavior?

Benjamin Han bhan at andrew.cmu.edu
Thu Aug 1 01:59:57 CEST 2002


This is an abstract of the actual code:

--- cut here ---
import copy

class Foo:
    def clone (self):
        return copy.deepcopy(self)

class Bar (list):
    pass

class Const:
    def __init__ (self, data):
        self.data=data
    def __repr__ (self):
        return str(self.data)

n1=Foo()
n1.t=[]
c=Bar()
c.append(Const('1'))
n1.t.append(c)

n2=Foo()
n2.t=[]
c=Bar()
c.append(Const('2'))
n2.t.append(c)

g=Foo()
g.hd=[]
g.hd.append(n1)
g.hd.append(n2)

print g.hd[0].t,id(g.hd[0].t)
print g.hd[1].t,id(g.hd[1].t)

print '----------------------------------------------------------------------'

h=g.clone()

print h.hd[0].t,id(h.hd[0].t)
print h.hd[1].t,id(h.hd[1].t)

--- cut here ---


Running on Python 2.2.1 gave the following output:

[[1]] 135743596
[[2]] 135759124
----------------------------------------------------------------------
[[1]] 135505252
[[1]] 135793916


But the last line should have "[[2]]...". Am I missing something here?

Thanks,

Ben




More information about the Python-list mailing list