加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python深浅拷贝

发布时间:2020-12-20 12:46:16 所属栏目:Python 来源:网络整理
导读:Python深浅拷贝 一、拷贝(赋值) lt = [1,2,3,4,5]lt2 = ltlt.append(6)print(lt)# 因为列表是可变类型, 所以lt的值变化,lt2值也会跟着变化print(lt2)print(id(lt))print(id(lt2)) 结果: [1,5,6] [1,6] 2304711549576 2304711549576 二、浅拷贝 添加值不发

Python深浅拷贝

一、拷贝(赋值)

lt = [1,2,3,4,5]
lt2 = lt
lt.append(6)

print(lt)

# 因为列表是可变类型, 所以lt的值变化,lt2值也会跟着变化
print(lt2)

print(id(lt))
print(id(lt2))

结果:
[1,5,6]
[1,6]


2304711549576
2304711549576

二、浅拷贝

  1. 添加值不发生变化

    import copy
    
    lt = [100,200,300,[400,500,600]]
    lt2 = copy.copy(lt)
    
    # 没有变化情况
    lt.append(700)
    print(lt)
    print(lt2)

    结果:

    [100,600],700]
    [100,600]]

  2. 添加值发生变化

    import copy
    
    lt = [100,600]]
    lt2 = copy.copy(lt)
    
    # 变化情况
    print('id(lt)',id(lt))
    print('id(lt[0])',id(lt[0]))
    print('id(lt[1])',id(lt[1]))
    print('id(lt[2])',id(lt[2]))
    print('id(lt[3])',id(lt[3]))
    print('*' * 50)
    print('id(lt2)',id(lt2))
    print('id(lt2[0])',id(lt2[0]))
    print('id(lt2[1])',id(lt2[1]))
    print('id(lt2[2])',id(lt2[2]))
    print('id(lt2[3])',id(lt2[3]))
    
    print('*' * 50)
    lt[-1].append(700)
    print(lt)
    print(lt2)

    结果:(浅拷贝,lt和lt2的id不一样,lt[-1]和lt[-1]一样)

    id(lt) 1520433324744
    id(lt[0]) 140712889544624
    id(lt[1]) 140712889547824
    id(lt[2]) 1520433550832
    id(lt[3]) 1520433324680


    id(lt2) 1520715912264
    id(lt2[0]) 140712889544624
    id(lt2[1]) 140712889547824
    id(lt2[2]) 1520433550832
    id(lt2[3]) 1520433324680


    [100,600,700]]
    [100,700]]

三、深拷贝

import copy

lt = [100,600]]
lt2 = copy.deepcopy(lt)
print('id(lt)',id(lt[3]))
print('*' * 50)

print('id(lt2)',id(lt2[3]))
print('*' * 50)

lt.append(70)
print(lt)
print(lt2)

print("*" * 50)

lt2[-1].append(7000)
print(lt)
print(lt2)

结果:

id(lt) 1585269859016
id(lt[0]) 140712889544624
id(lt[1]) 140712889547824
id(lt[2]) 1585270085104
id(lt[3]) 1585269858952


id(lt2) 1585552380680
id(lt2[0]) 140712889544624
id(lt2[1]) 140712889547824
id(lt2[2]) 1585270085104
id(lt2[3]) 1585299572040


[100,70]
[100,600]]


[100,7000]]

四、总结

  1. 拷贝:当lt2为lt的拷贝对象时, lt内可变类型变化,lt2变化;lt内的不可变类型变化,lt2变化(简单赋值)
  2. 浅拷贝:当lt2为lt的拷贝对象时,lt内可变类型变化,lt2变化;lt内不可变类型变化,lt2不变化(copy.copy())
  3. 深拷贝:当lt2为lt的拷贝对象时, lt内的可变类型变化,lt2不变化;lt内不可变类型变化,lt2不变化(copy.deepcopy())

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读