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

    list1 = ['egon', 'lxx', [1,2]]
    list2 = list1 #这不叫copy 二者分隔不开,list改list2也跟着改,因为指向的就是同一个地址
    

    拷贝:拷贝指的是拷贝原列表产生新的列表(id 是不同的)

    浅拷贝:

    list1 = ['egon', 'lxx', [1,2]]
    list3 = list1.copy() #浅拷贝
    

    什么是浅拷贝:

    ​ 是把原列表第一层的内存地址不加区分(可变和不可变元素)完全 copy 一份给新列表

    list1=[
        'egon',
        'lxx',
        [1, 2]
    ]
    list3 = list1.copy()
    print(list3) #['egon', 'lxx', [1, 2]]
    print(id(list1)) #4328662792
    print(id(list3)) #4328845576
    print(list3[0], list3[1], list3[2])
    print(id(list3[0]), id(list3[1]), id(list3[2]))
    '''
    不可变       不可变         可变   
    egon         lxx        [1, 2]
    4562892312 4564357336 4564371656
    '''
    list1[0] = 'EGON'
    list1[1] = 'LXX'
    list1[2][0] = 111
    list1[2][1] = 222
    print(list3[0], list3[1], list3[2])
    print(id(list3[0]), id(list3[1]), id(list3[2]))
    '''
    egon        lxx       [111, 222]
    4562892312 4564357336 4564371656
    '''
    

    image-20200309170144443

    总结:

    1、对于不可变类型的赋值,都是产生了新值,让原列表的索引指向新的内存地址,并不会影响新列表

    2、对于不可变类型时,会改变可变类型中包含元素的值,但元素的内存地址不变

    也就是说,浅拷贝只是拷贝的原列表的第一层,其内部每个元素还是指向同一个内存地址。

    深拷贝:

    ​ 深拷贝是对每一层都拷贝,对可变及不可变类型都加以区分

    import copy
    list1=[
        'egon',
        'lxx',
        [1,2]
    ]
    
    list3 = copy.deepcopy(list1)
    print(id(list1[0]),id(list1[1]),id(list1[2]))
    print(id(list3[0]),id(list3[1]),id(list3[2]))
    '''
    4519556632 4521021656 4520863496
    4519556632 4521021656 4521049096
    '''
    list1[0]='EGON'
    list1[1]='LXX'
    list1[2][0]=111
    list1[2][1]=222
    # print(list1)
    print(list3) #['egon', 'lxx', [1, 2]]
    
    

    深拷贝

    总结:

    深拷贝是区分可变类型与不可变类型的copy机制

    也就是说深拷贝是完全拷贝原列表的所有层

    如果想要针对改操作,完全独立开两个列表,用 copy.deepcopy()

  • 相关阅读:
    DNS原理总结及其解析过程详解
    linux修改进程名
    mq_open失败,Invalid argument
    Posix消息队列
    undefined reference to 'mq_open'
    量化投资学习笔记08——统计学基础补漏
    量化投资学习笔记07——python知识补漏
    量化投资学习笔记06——《打开量化投资的黑箱》读书笔记
    量化投资学习笔记05——检验计算回测指标程序
    量化投资学习笔记04——回测实盘策略
  • 原文地址:https://www.cnblogs.com/xy-han/p/12450303.html
Copyright © 2011-2022 走看看