python中的copy.deepcopy()

源于: 功能类代码 – TxtSampleCluster.py


功能比较:
   copy.copy()是浅拷贝,只拷贝父对象,不会拷贝对象的内部的子对象。copy.deepcopy()是深拷贝,会拷贝对象及其子对象,哪怕以后对其有改动,也不会影响其第一次的拷贝。

import copy

List1 = ['1', '2', 3, 'a', ['b', 'c']]
List2 = List1        # 将List1赋给List2
List3 = copy.copy(List1)       # 浅拷贝
List4 = copy.deepcopy(List1)   # 深拷贝

List1.append('test')     # 在List1末尾添加'test'
List1[4].append('d')     # 在List1中['b','c']的末尾添加'd'

print('List1:%s' % List1)
print('List2:%s' % List2)
print('List3:%s' % List3)
print('List4:%s' % List4)

结果为:

List1:['1', '2', 3, 'a', ['b', 'c', 'd'], 'test']
List2:['1', '2', 3, 'a', ['b', 'c', 'd'], 'test']
List3:['1', '2', 3, 'a', ['b', 'c', 'd']]
List4:['1', '2', 3, 'a', ['b', 'c']]
### Python `copy.deepcopy` 函数的性能分析 #### 深拷贝机制概述 深拷贝操作会创建一个新的复合对象,并递归地将原始对象中的所有子对象复制到新对象中。这意味着如果源数据结构非常复杂或庞大,那么深拷贝将会消耗更多的时间和内存资源。 #### 性能影响因素 - **嵌套层次**:当处理多层嵌套的数据结构时(如二维列表或多级字典),由于每次都需要深入一层来完成完整的副本创建过程,因此随着层数增加,所需时间也会相应增长[^1]。 - **元素数量**:被复制的对象内含有的元素越多,则整个复制过程中涉及的操作次数就越高,从而导致更慢的速度表现。 - **不可变对象 vs 可变对象**:对于字符串、元组这类不可变得内置类型,在进行深拷贝时不必要真正克隆它们;而对于像列表这样的可变容器则需逐项重建其内部成员关系链表。 #### 实验测试代码示例 下面通过一段简单的实验脚本来展示不同规模下的效率差异: ```python import timeit from copy import deepcopy def test_deep_copy_performance(size): original_data = [[i * j for j in range(10)] for i in range(size)] start_time = timeit.default_timer() _ = deepcopy(original_data) end_time = timeit.default_timer() elapsed_seconds = (end_time - start_time)*1e6 print(f"Deep copying a {size}x{len(original_data[0])} matrix took {elapsed_seconds:.2f} microseconds.") if __name__ == "__main__": sizes_to_test = [10, 100, 500, 1000] for size in sizes_to_test: test_deep_copy_performance(size) ``` 此段程序定义了一个名为 `test_deep_copy_performance()` 的辅助函数用于测量给定大小矩阵执行一次深拷贝所花费的具体耗时时长,并打印出来供观察者直观感受变化趋势。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值