python小模块-----copy 模块

转自:http://python.01314.cn/201506110.html

copy 模块


简单点说

1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
2. copy.deepcopy 深拷贝 拷贝对象及其子对象



浅复制只复制对象本身,没有复制该对象所引用的对象。

  1. #coding=gbk  
    import copy  
    l1 = [1, 2, [3, 4]]  
    l2 = copy.copy(l1)  
    print l1  
    print l2  
    l2[2][0] = 50  
    print l1  
    print l2  
    #---- 结果 ----  
    [1, 2, [3, 4]]  
    [1, 2, [3, 4]]  
    [1, 2, [50, 4]]  
    [1, 2, [50, 4]]  

同样的代码,使用深复制,结果就不一样:

  1. import copy  
    l1 = [1, 2, [3, 4]]  
    l2 = copy.deepcopy(l1)  
    print l1  
    print l2  
    l2[2][0] = 50  
    print l1  
    print l2  
    #---- 结果 ----  
    [1, 2, [3, 4]]  
    [1, 2, [3, 4]]  
    [1, 2, [3, 4]]  
    [1, 2, [50, 4]]  

改变copy的默认行为

在定义类的时候,通过定义__copy__和__deepcopy__方法,可以改变copy的默认行为。下面是一个简单的例子:

  1. class CopyObj(object):  
        def __repr__(self):  
            return "CopyObj"  
          
        def __copy__(self):  
            return "Hello"  
    obj = CopyObj()  
    obj1 = copy.copy(obj)  
    print obj  
    print obj1  
    #---- 结果 ----  
    CopyObj  
    Hello  
  2. import copy  
    a = [1, 2, 3, 4, ['a', 'b']] #原始对象  
      
    b = a #赋值,传对象的引用  
    c = copy.copy(a) #对象拷贝,浅拷贝  
    d = copy.deepcopy(a) #对象拷贝,深拷贝  
      
    a.append(5) #修改对象a  
    a[4].append('c') #修改对象a中的['a', 'b']数组对象  
      
    print 'a = ', a  
    print 'b = ', b  
    print 'c = ', c  
    print 'd = ', d 
    

你可能感兴趣的:(python)