戴宇轩 发表于 2015-3-18 20:55:27

<标准库> copy模块

本帖最后由 戴宇轩 于 2015-3-21 11:24 编辑

这个模块有两个函数, copy和deepcopy:

1. copy.copy (浅拷贝)只拷贝父对象,不会拷贝对象的内部的子对象。
2. copy.deepcopy (深拷贝) 拷贝对象及其子对象。也就是说, 如果列表里还有列表, deepcopy也会将其拷贝, 但是copy做不到这一点

看了上面的解释, 大家可能看得云里雾里, 这里有一个很好的例子:import copy

a = ]#原始列表
print('原始列表 =', a)

b = a# 把a赋值给b
c = copy.copy(a)# 浅拷贝a, 等效于a[:]
d = copy.deepcopy(a)# 深拷贝a

a.append(5)# 修改对象a
a.append('c')# 修改对象a中的列表['a', 'b']

print('修改后的原始列表 =', a)
print('赋值 =', b)
print('浅拷贝 =', c)
print('深拷贝 =', d)原始列表 = ]
修改后的原始列表 =, 5]
赋值 =, 5]
浅拷贝 =]
深拷贝 =
PS: 这两个函数的具体用处其实我也不太清楚, 平时多做积累, 需要用的时候肯定会派上用场的^_^
来自:鱼C论坛 iPhone客户端

dothink 发表于 2015-3-26 11:54:33

感觉python中很多原理想要吃透的话还是要学好C啊

d5zhao 发表于 2015-4-6 07:05:38

有谁能把常用板块调出来说说

zd0307 发表于 2015-4-7 02:12:37

看一下

comeonhcl 发表于 2016-9-2 17:20:22

好好学习一下

maowei 发表于 2016-11-6 11:00:24

运行结果copy不是也将列表中的列表拷贝了吗?

蛋炒饭妖妖 发表于 2016-11-9 14:30:16

为啥浅拷贝会丢掉最后一个值?不是说不能复制列表内的列表么?那不应该是5可以进去,但是c不行吗?

jackie-L 发表于 2016-11-9 16:31:08

这是一个好东西,我收藏了,b就是在a的列表上多贴了一个b的标签,所以修改a就等于修改b,修改b等于修改a;浅拷贝就是在就是保证第一层的数据被复制给新对象,而第一层中的列表中也就是第二层数据只是赋值标签,所以当修改a中的二层数据后,c中的第二层列表也跟着被修改了,因为c中的第二层列表只是一个label

清风挽起衣袖 发表于 2021-5-16 03:15:49

看上去深拷贝好像是对列表包括里面的数据都是重新创建,浅拷贝只是重新创建列表,里面的数据还是贴的标签过去的

龙舞九天 发表于 2021-5-16 06:03:10

{:5_95:}

Vicissitude357 发表于 2022-9-5 10:41:48

谢谢
页: [1]
查看完整版本: <标准库> copy模块