2006年04月02日 星期日 18:52
In [49]: a = {'a':{'x':1, 'y':2}, 'b':3}
In [50]: a
Out[50]: {'a': {'y': 2, 'x': 1}, 'b': 3}
In [51]: b = copy.copy(a)
In [52]: c = copy.deepcopy(a)
In [53]: b
Out[53]: {'a': {'y': 2, 'x': 1}, 'b': 3}
In [54]: c
Out[54]: {'a': {'y': 2, 'x': 1}, 'b': 3}
In [55]: c['a']['x'] = 100
In [56]: c
Out[56]: {'a': {'y': 2, 'x': 100}, 'b': 3}
In [57]: a
Out[57]: {'a': {'y': 2, 'x': 1}, 'b': 3}
In [58]: b['a']['x']=100
In [59]: b
Out[59]: {'a': {'y': 2, 'x': 100}, 'b': 3}
In [60]: a
Out[60]: {'a': {'y': 2, 'x': 100}, 'b': 3}
In [61]: b['b'] = 300
In [62]: b
Out[62]: {'a': {'y': 2, 'x': 100}, 'b': 300}
In [63]: a
Out[63]: {'a': {'y': 2, 'x': 100}, 'b': 3}
以上没有问题,说明浅拷贝的内容的第二层还是对原来对象的引用,修改它会引起原内容的改变。
但如果被拷贝对象内部包含复杂对象,如自己定义的类的一些实例,
就会产生如下情况:(a 被重新赋值了)
In [63]: b = copy.copy(a)
In [64]: c = copy.deepcopy(a)
In [65]: x in b
Out[65]: True
In [66]: x in c
Out[66]: False
In [67]: b.remove(x) # 没问题
In [68]: c.remove(x) # 出问题了
---------------------------------------------------------------------------
exceptions.ValueError Traceback (most recent
call last)
ValueError: list.remove(x): x not in list
这样深拷贝得到的对象就和原来的不是一模一样了,而修改浅拷贝得到的对象又会使得原来的对象(a)发生改变。
我想得到一个和 a 一模一样的对象(具有和 a 一样的方法),该怎么做呢?请大侠指教!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060402/4b4494fb/attachment.html
Zeuux © 2025
京ICP备05028076号