鱼C论坛

 找回密码
 立即注册
查看: 1401|回复: 4

[已解决]哪位大神给我讲讲copy模块,好凌乱

[复制链接]
发表于 2017-4-1 18:18:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题
最佳答案
2017-4-1 18:23:43
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
2. copy.deepcopy 深拷贝 拷贝对象及其子对象
一个很好的例子:


[python] view plain copy
import copy  
a = [1, 2, 3, 4, ['a', 'b']]  #原始对象  
  
b = a  #赋值,传对象的引用  
c = copy.copy(a)  #对象拷贝,浅拷贝  
d = copy.deepcopy(a)  #对象拷贝,深拷贝  
  
a.append(5)  #修改对象a  
a[4].append('c')  #修改对象a中的['a', 'b']数组对象  
  
print 'a = ', a  
print 'b = ', b  
print 'c = ', c  
print 'd = ', d  

输出结果:
a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c =  [1, 2, 3, 4, ['a', 'b', 'c']]
d =  [1, 2, 3, 4, ['a', 'b']]

copy 模块包含两个函数, 用来拷贝对象
copy(object) => object 创建给定对象的 "浅/浅层(shallow)" 拷贝(copy).
这里 "浅/浅层(shallow)" 的意思是复制对象本身, 但当对象是一个容器 (container) 时, 它的成员仍然指向原来的成员对象.
---------------------------------------------------------------------------------------------------------------------------------------------------
使用 copy 模块复制对象
浅层复制
你也可以使用[:]语句 (完整切片) 来对列表进行浅层复制, 也可以使用 copy 方法复制字典.
---------------------------------------------------------------------------------------------------------------------------------------------------
a = [[1],[2],[3]]
b = copy.copy(a)     
---------------------------------------------------------------------------------------------------------------------------------------------------
使用 copy 模块复制集合(Collections)
深层复制
相反地, deepcopy(object) => object 创建一个对象的深层拷贝(deepcopy),  当对象为一个容器时, 所有的成员都被递归地复制了
---------------------------------------------------------------------------------------------------------------------------------------------------
a = [[1],[2],[3]]
b = copy.deepcopy(a)

各种问题问题要百度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-1 18:23:43 | 显示全部楼层    本楼为最佳答案   
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
2. copy.deepcopy 深拷贝 拷贝对象及其子对象
一个很好的例子:


[python] view plain copy
import copy  
a = [1, 2, 3, 4, ['a', 'b']]  #原始对象  
  
b = a  #赋值,传对象的引用  
c = copy.copy(a)  #对象拷贝,浅拷贝  
d = copy.deepcopy(a)  #对象拷贝,深拷贝  
  
a.append(5)  #修改对象a  
a[4].append('c')  #修改对象a中的['a', 'b']数组对象  
  
print 'a = ', a  
print 'b = ', b  
print 'c = ', c  
print 'd = ', d  

输出结果:
a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c =  [1, 2, 3, 4, ['a', 'b', 'c']]
d =  [1, 2, 3, 4, ['a', 'b']]

copy 模块包含两个函数, 用来拷贝对象
copy(object) => object 创建给定对象的 "浅/浅层(shallow)" 拷贝(copy).
这里 "浅/浅层(shallow)" 的意思是复制对象本身, 但当对象是一个容器 (container) 时, 它的成员仍然指向原来的成员对象.
---------------------------------------------------------------------------------------------------------------------------------------------------
使用 copy 模块复制对象
浅层复制
你也可以使用[:]语句 (完整切片) 来对列表进行浅层复制, 也可以使用 copy 方法复制字典.
---------------------------------------------------------------------------------------------------------------------------------------------------
a = [[1],[2],[3]]
b = copy.copy(a)     
---------------------------------------------------------------------------------------------------------------------------------------------------
使用 copy 模块复制集合(Collections)
深层复制
相反地, deepcopy(object) => object 创建一个对象的深层拷贝(deepcopy),  当对象为一个容器时, 所有的成员都被递归地复制了
---------------------------------------------------------------------------------------------------------------------------------------------------
a = [[1],[2],[3]]
b = copy.deepcopy(a)

各种问题问题要百度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-1 18:25:43 | 显示全部楼层
新手·ing 发表于 2017-4-1 18:23
1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
2. copy.deepcopy 深拷贝 拷贝对象及其 ...

谢谢版主回答
但是 copy是有两个函数吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-1 18:26:49 | 显示全部楼层
49042333 发表于 2017-4-1 18:25
谢谢版主回答
但是 copy是有两个函数吗

只有两个
浅拷贝
深拷贝
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-1 19:02:37 | 显示全部楼层
谢谢了
我在自己查查
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 19:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表