深浅拷贝

Posted on 2018-09-11 19:54  帅气阿明  阅读(79)  评论(0编辑  收藏  举报

赋值:

  • 没有创建新的对象,多个变量指向一个对象,与拷贝无关
  • a=[1,2,3,[4,5]]
    b=a
    print(a,id(a))#[1, 2, 3, [4, 5]] 1807996384072
    print(b,id(b))#[1, 2, 3, [4, 5]] 1807996384072
    
    a.pop()
    print(a,id(a))#[1, 2, 3] 1807996384072
    print(b,id(b))#[1, 2, 3] 1807996384072
    View CodeView Code

浅拷贝:

  • 只拷贝第一层,第二层不会被拷贝
  • l1=[1,2,3,['barry','alex']]
    l2=l1.copy()
    print(l1,id(l1))#[1, 2, 3, ['barry', 'alex']] 2578599060616
    print(l2,id(l2))#[1, 2, 3, ['barry', 'alex']] 2578599889480
    l1.append('wusir')
    print(l1,id(l1))#[1, 2, 3, ['barry', 'alex'], 'wusir'] 2578599060616
    print(l2,id(l2))#[1, 2, 3, ['barry', 'alex']] 2578599889480
    l1[0]=333
    print(l1,id(l1))#[333, 2, 3, ['barry', 'alex']] 2578599060616
    print(l2,id(l2))#[1, 2, 3, ['barry', 'alex']] 2578599889480
    内存地址不同,被拷贝的对象作出改变,另一个不改变
    View Code

深拷贝:

  • 创建一个新的对象,把内部所有的元素都进行拷贝,不会产生一个变另一个跟着变
  • import copy
    l1=[1,2,3,['barry','alex']]
    l2=copy.deepcopy(l1)
    print(l1,id(l1))#[1, 2, 3, ['barry', 'alex']] 2037159109640
    print(l2,id(l2))#[1, 2, 3, ['barry', 'alex']] 2037157644168
    
    l1[1]=222
    print(l1,id(l1))#[1, 222, 3, ['barry', 'alex']] 2037159109640
    print(l2,id(l2))#[1, 2, 3, ['barry', 'alex']] 2037157644168
    View Code