您的位置:首页 > 编程语言 > Python开发

python 进阶学习之13

2014-07-26 11:41 323 查看
>>> [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()进行深拷贝操作.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: