zoukankan      html  css  js  c++  java
  • Python深浅拷贝

    Python深浅拷贝
    一、引言
    在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用
    针对该列表l1=['a','b','c',['d','e','f']]一般有三种方法,分别为:拷贝(赋值)、浅拷贝、深拷贝
    注意:拷贝/浅拷贝/深拷贝都是针对可变类型数据而言的
    1.1可变or不可变
    id不变值可变,即在原值的基础上修改,则为可变数据类型;值变id也变,即重新申请一个空间放入新值,则为不可变数据类型。

    age = 19
    print(f'first:{id(age)}')
    age = 20
    print(f'second:{id(age)}')
    输出
    first:4384901776
    second:4384901808

    二、拷贝
    如果l2是l1的拷贝对象,则l1内部的任何数据类型的元素变化,则l2内部的元素也会跟着改变,因为可变类型值变id不变。

    l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
    l2 = l1
    
    l1.append('g')
    
    print(l1)
    print('-'*50)
    print(l2)

    输出
    ['a', 'b', 'c', ['d', 'e', 'f'], 'g']
    ['a', 'b', 'c', ['d', 'e', 'f'], 'g']
    三、浅拷贝
    如果l2是l1的浅拷贝对象,那么l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,则l2会跟着改变。

    import copy
    
    l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
    l2 = copy.copy(l1)
    
    l1.append('g')
    
    print(l1)

    输出
    ['a', 'b', 'c', ['d', 'e', 'f'], 'g']


    print(l2)
    输出
    ['a', 'b', 'c', ['d', 'e', 'f']]


    l1[3].append('g')
    print(l1)
    输出
    ['a', 'b', 'c', ['d', 'e', 'f', 'g'], 'g']


    print(l2)
    输出
    ['a', 'b', 'c', ['d', 'e', 'f', 'g']]
    四、深拷贝
    如果l2是l1的深拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,l2也不会变,即l2永远不会因为l1的变化而变化。

    import copy
    
    l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
    l2 = copy.deepcopy(l1)
    
    l1.append('g')
    
    print(l1)

    输出
    ['a', 'b', 'c', ['d', 'e', 'f'], 'g']


    print(l2)
    输出
    ['a', 'b', 'c', ['d', 'e', 'f']]


    l1[3].append('g')
    print(l1)
    输出
    ['a', 'b', 'c', ['d', 'e', 'f', 'g'], 'g']


    print(l2)
    输出
    ['a', 'b', 'c', ['d', 'e', 'f']]

  • 相关阅读:
    hdu 5723 Abandoned country 最小生成树 期望
    OpenJ_POJ C16G Challenge Your Template 迪杰斯特拉
    OpenJ_POJ C16D Extracurricular Sports 打表找规律
    OpenJ_POJ C16B Robot Game 打表找规律
    CCCC 成都信息工程大学游记
    UVALive 6893 The Big Painting hash
    UVALive 6889 City Park 并查集
    UVALive 6888 Ricochet Robots bfs
    UVALive 6886 Golf Bot FFT
    UVALive 6885 Flowery Trails 最短路
  • 原文地址:https://www.cnblogs.com/sea-stream/p/14193928.html
Copyright © 2011-2022 走看看