python 进阶学习之13

>>> [id(x) for x in person,hus,wif ]
[3077489356L, 3077491084L, 3077491340L]
>>> hus[0]='j'
>>> wif[0]='s'
>>> hus,wif
(['j', ['savings', 100.0]], ['s', ['savings', 100.0]])
>>> hus[1][1]=50.00
>>> hus,wif
(['j', ['savings', 50.0]], ['s', ['savings', 50.0]])
序列类型对象的浅拷贝是默认类型拷贝,并可以以下几种方式实施:(1)完全切片操作[:],(2)利用工厂函数,比如list(),dict()等,(3)使用copy 模块的copy 函数.

第一个对象是不可变的(是个字符串类型),而第二个是可变的(一个列表).正因为如此,当进行浅拷贝时,字符串被显式的拷贝,并新创建了一个字符串对象,而列
表元素只是把它的引用复制了一下,并不是它的成员.

copy.deepcopy()

>>> h=person
>>> import copy
>>> w=copy.deepcopy(person)
>>> [id(x) for x in person,h,w]
[3077489356L, 3077489356L, 3076713036L]
>>> h[0]='a'
>>> w[0]='q'
>>> h,w
(['a', ['savings', 50.0]], ['q', ['savings', 50.0]])
>>> h[1][1]=20.0
>>> h,w
(['a', ['savings', 20.0]], ['q', ['savings', 50.0]])
第一,非容器类型(比如数字,字符串和其他"原子"类型的对象,像代码,类型和xrange 对象等)没有被拷贝一说,浅拷贝是用完全切片操作来完成的.

第二,如果元组变量只包含原子类型对象,对它的深拷贝将不会进行.如果我们把账户信息改成元组类型,那么即便按我们的要求使用深拷贝操作也只能得到一个浅拷贝:

copy()进行浅拷贝操作,而deepcopy()进行深拷贝操作.

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值