Python的深浅拷贝
在Python编程中,我们经常会遇到需要复制一个对象的情况,Python提供了两种复制方式:浅拷贝和深拷贝,这两种拷贝方式的主要区别在于它们复制的对象类型和复制后对原对象的修改是否会影响到新对象,本文将详细介绍Python的深浅拷贝,并通过实例代码进行演示。
一、浅拷贝
浅拷贝是Python中最简单的复制方式,它创建了一个新的对象,但只复制了原对象中的引用类型数据,而不是实际的数据,这意味着如果原对象中的引用类型数据发生变化,新对象中的数据也会跟着变化。
在Python中,可以使用`copy`模块的`copy()`函数实现浅拷贝,下面是一个简单的例子:
import copy original_list = [1, 2, [3, 4]] shallow_copied_list = copy.copy(original_list) print("Original list:", original_list) print("Shallow copied list:", shallow_copied_list) original_list[2][0] = 99 print("Modified original list:", original_list) print("Shallow copied list after modification:", shallow_copied_list)
输出结果:
Original list: [1, 2, [3, 4]] Shallow copied list: [1, 2, [3, 4]] Modified original list: [1, 2, [99, 4]] Shallow copied list after modification: [1, 2, [99, 4]]
从上面的代码可以看出,当我们修改原列表中的子列表时,浅拷贝后的列表也发生了变化,这是因为浅拷贝只复制了原列表中的引用,而没有复制子列表的实际数据。
二、深拷贝
深拷贝是Python中更复杂的复制方式,它创建了一个新的对象,并递归地复制了原对象中的所有数据,这意味着如果原对象中的数据发生变化,新对象中的数据不会受到影响。
在Python中,可以使用`copy`模块的`deepcopy()`函数实现深拷贝,下面是一个简单的例子:
import copy original_list = [1, 2, [3, 4]] deep_copied_list = copy.deepcopy(original_list) print("Original list:", original_list) print("Deep copied list:", deep_copied_list) original_list[2][0] = 99 print("Modified original list:", original_list) print("Deep copied list after modification:", deep_copied_list)
Original list: [1, 2, [3, 4]] Deep copied list: [1, 2, [3, 4]] Modified original list: [1, 2, [99, 4]] Deep copied list after modification: [1, 2, [3, 4]]
从上面的代码可以看出,当我们修改原列表中的子列表时,深拷贝后的列表并没有发生变化,这是因为深拷贝不仅复制了原列表中的引用,还递归地复制了子列表的实际数据。
通过以上介绍,我们可以得出以下结论:
1. 浅拷贝只复制了原对象中的引用类型数据,而没有复制实际的数据,如果原对象中的数据发生变化,新对象中的数据也会跟着变化。
2. 深拷贝创建了一个新的对象,并递归地复制了原对象中的所有数据,如果原对象中的数据发生变化,新对象中的数据不会受到影响。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/9478.html