python深拷贝与浅拷贝

深浅拷贝异同主要体现于可变对象上,对于tuple之类的不可变对面,深浅拷贝后,地址值和变量值都是一样的,但是对与list之类的可变对象,深浅拷贝后,差异性很大

>>>import copy
>>>a = (1,2,3)
>>>b = a 
>>>c = copy.copy(a)
>>>d = copy.deepcopy(a)

>>>id(a)==id(b)==id(c)==id(d)
True


>>>a = [1,2,3,[4,4]]
>>>b = a 
>>>c = copy.copy(a)
>>>d = copy.deepcopy(a)

>>> a[3].append(4)
>>>a.append[5]

>>>a, b, c, d
[1,2,3,[4,4,4],5] #a
[1,2,3,[4,4,4],5] #b,  使用is,b的地址值和变量值一直保持和a一样。ab指向同一块内存
[1,2,3,[4,4,4]]    #c    使用copy,重新划分一块内存给c,并且c里元素都指向a里元素的内存,a中可变对象改动时内存地址不变,不可变对象修改后对应内存地址改变了,所以c=copy(a)后,c里的元素依旧指向原来的内存地址,tuple变了内存地址也变了,c中的元素还是指向原来的地址,出现原tuple值没变,而list类元素反而随着a变动还变动,因为list是可变对象,变动时内存地址不变。(list可变是指通过append等方法调用后内存地址不变,如果重新赋值相当于删除该变量重新生成新变量对应新内存地址)
[1,2,3,[4,4]]        #d   使用deepcopy,重新划分一块内存给d,地址值改变,d不跟随a变动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值