python 浅copy和深copy

对于不可变的数据类型,字符串,元组和数字来讲,赋值号、深copy和浅copy没有区别。

n=1
s=n
s1=copy.copy(n)
s2=copy.deepcopy(n)
print(id(n),id(s),id(s1),id(s2))
#输出地址都一样

对于可变数据类型,list,dict和set,赋值号是引用原来的对象,与原对象是同一个地址;浅copy是新复制一个父级的对象,因此父级对象的改变,浅copy不会受影响,但不复制子级对象,即与原对象共用子级对象,因此子级对象的改变时,原对象和浅copy出来的对象均会改变;deepcopy是完全新复制一个对象,具有完全不一样的id。

dict1 = {'user': 'runoob', 'num': [1, 2, 3],'cc':[1,2,3,[4,5]]}
dict2 = dict1  # 赋值: 引用对象
dict3 = dict1.copy()  # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,子对象是引用
dict4=copy.deepcopy(dict1)#深copy,原对象任何操作不会影响copy出来的对象

# 修改 data 数据
dict1['user'] = 'root'
dict1['num'].remove(1)
dict1['ai']='kunkun'
dict1['cc'][3][0]=8

# 输出结果
print(dict1)#{'user': 'root', 'num': [2, 3], 'cc': [1, 2, 3, [8, 5]], 'ai': 'kunkun'}
print(dict2)#{'user': 'root', 'num': [2, 3], 'cc': [1, 2, 3, [8, 5]], 'ai': 'kunkun'}
print(dict3)#{'user': 'runoob', 'num': [2, 3], 'cc': [1, 2, 3, [8, 5]]}
print(dict4)#{'user': 'runoob', 'num': [1, 2, 3], 'cc': [1, 2, 3, [4, 5]]}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值