Python copy & deepcopy 的比较

本文探讨了Python中的copy和deepcopy的区别。通过实例展示了copy在处理复杂数据结构时,内部仍然存在对象引用,而deepcopy则能完全避免这种情况,确保所有数据都是独立复制的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看下copy

In [1]: d1 = {'a':1, 'b':2, 'c':{'c1':3.1, 'c2':3.2, 'c3':{'c31':3.31,'c32':3.32}}, 'd':[41,42,43,[441,442]]}

In [3]: d1
Out[3]:
{'a': 1,
 'b': 2,
 'c': {'c1': 3.1, 'c2': 3.2, 'c3': {'c31': 3.31, 'c32': 3.32}},
 'd': [41, 42, 43, [441, 442]]}

In [4]: d2 = d1

In [5]: id(d1), id(d2)
Out[5]: (2029403606256, 2029403606256)

In [6]: d2 = d1.copy()

In [7]: id(d1), id(d2)
Out[7]: (2029403606256, 2029403809328)

In [8]: id(d1['c']), id(d2['c'])
Out[8]: (2029403606112, 2029403606112)

可以看到copy的d1和d2的内存位置不一样,但是,d1[‘c’]和d2[‘c’]内存位置却是一样的。说明在复杂数据结构下,copy也不免“落入俗套”,复制的对象,有部分地址重合,即2个对象内部有部分数据复用了。

比较下deepcopy

In [13]: import copy

In [14]: d2 = copy.deepcopy(d1)

In [15]: id(d1['c']), id(d2['c'])
Out[15]: (2029403606112, 2029404014344)

可以看到,即便是较为复杂的数据结构,用deepcopy后,可以完整复制数据,而不会产生内部数据复用的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值