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号