Python中常用的copy()函数及其使用案例
发布时间:2023-06-15 08:54:30
在Python中,copy()函数是很常用的,它的作用是复制一个已经存在的对象,并将其赋值给一个新的变量。在本文中,我们将探讨一些常用的copy()函数及其使用案例。
1.列表的浅拷贝
在Python中,使用copy函数来复制一个列表时,会发现复制得到的是一个与原列表相同元素,但是不同的列表。在这种情况下,我们称为浅拷贝。 代码示例如下:
orig_list = [1,2,3,[4,5]]
new_list = orig_list.copy()
print(f"orig_list: {orig_list}")
print(f"new_list: {new_list}")
# 修改原list中的对象
orig_list[0] = 0
# 修改原list中的嵌套对象
orig_list[-1].append(6)
print(f"orig_list: {orig_list}")
print(f"new_list: {new_list}")
# 输出结果:
# orig_list: [1, 2, 3, [4, 5]]
# new_list: [1, 2, 3, [4, 5]]
# orig_list: [0, 2, 3, [4, 5, 6]]
# new_list: [1, 2, 3, [4, 5, 6]]
可以看到,原始列表和新列表中的值都已经更新了,但是嵌套的列表仍然对原列表和新列表产生了影响。
2.列表的深拷贝
与浅拷贝不同,深拷贝是复制原列表及其嵌套列表中的所有元素,而不是简单的复制引用。在Python中,可以使用copy模块中的deepcopy()函数来执行深拷贝。 代码示例如下:
import copy
orig_list = [1,2,3,[4,5]]
new_list = copy.deepcopy(orig_list)
print(f"orig_list: {orig_list}")
print(f"new_list: {new_list}")
# 修改原list中的对象
orig_list[0] = 0
# 修改原list中的嵌套对象
orig_list[-1].append(6)
print(f"orig_list: {orig_list}")
print(f"new_list: {new_list}")
# 输出结果:
# orig_list: [1, 2, 3, [4, 5]]
# new_list: [1, 2, 3, [4, 5]]
# orig_list: [0, 2, 3, [4, 5, 6]]
# new_list: [1, 2, 3, [4, 5]]
可以看到,现在的嵌套列表没有在新列表中添加元素,因为传递给deepcopy()函数的是一个引用,而不是实际的对象。
3.字典的浅拷贝
在Python中,字典的复制方式与列表类似。使用copy()方法复制字典对象将得到一个浅拷贝。 代码示例如下:
orig_dict = {"a":1, "b":2, "c": {"d":3, "e":4}}
new_dict = orig_dict.copy()
print(f"orig_dict: {orig_dict}")
print(f"new_dict: {new_dict}")
# 修改原dict中的对象
orig_dict["a"] = 0
# 修改原dict中的嵌套对象
orig_dict["c"]["d"] = 5
print(f"orig_dict: {orig_dict}")
print(f"new_dict: {new_dict}")
# 输出结果:
# orig_dict: {'a': 1, 'b': 2, 'c': {'d': 3, 'e': 4}}
# new_dict: {'a': 1, 'b': 2, 'c': {'d': 3, 'e': 4}}
# orig_dict: {'a': 0, 'b': 2, 'c': {'d': 5, 'e': 4}}
# new_dict: {'a': 1, 'b': 2, 'c': {'d': 5, 'e': 4}}
与列表示例类似,嵌套字典也会对原字典和新字典产生影响。
4.字典的深拷贝
与深拷贝列表类似,可以使用copy模块中的deepcopy()函数执行深拷贝。 代码示例如下:
import copy
orig_dict = {"a":1, "b":2, "c": {"d":3, "e":4}}
new_dict = copy.deepcopy(orig_dict)
print(f"orig_dict: {orig_dict}")
print(f"new_dict: {new_dict}")
# 修改原dict中的对象
orig_dict["a"] = 0
# 修改原dict中的嵌套对象
orig_dict["c"]["d"] = 5
print(f"orig_dict: {orig_dict}")
print(f"new_dict: {new_dict}")
# 输出结果:
# orig_dict: {'a': 1, 'b': 2, 'c': {'d': 3, 'e': 4}}
# new_dict: {'a': 1, 'b': 2, 'c': {'d': 3, 'e': 4}}
# orig_dict: {'a': 0, 'b': 2, 'c': {'d': 5, 'e': 4}}
# new_dict: {'a': 1, 'b': 2, 'c': {'d': 3, 'e': 4}}
可以看到,现在嵌套字典并没有在新字典中添加元素,因为传递给deepcopy()函数的是一个引用,而不是实际的对象。
总结
本文中,我们学习了copy()函数及其在Python中的常见应用。在Python中,copy()函数用于复制对象,可以创建一个新的可变对象来保存副本,而不是原始对象的引用。在需要更改副本而不更改原始对象时,这非常有用。
