Python 深拷贝和浅拷贝的区别

Python 深拷贝和浅拷贝的区别

Python 深拷贝和浅拷贝的区别

在Python中,拷贝是指复制一个对象的内容到另一个对象中。在这个过程中,有深拷贝和浅拷贝之分。深拷贝是指完全复制一个对象及其所有的子对象,而浅拷贝是指只复制对象本身,而不复制其子对象。本文将详细介绍深拷贝和浅拷贝的区别,并举例说明它们在Python中的应用。

浅拷贝

在Python中,浅拷贝可以使用 copy 模块的 copy() 方法来实现。浅拷贝只会复制对象本身,而不会复制对象中的子对象。这意味着,如果原对象包含了可变对象(例如列表、字典等),浅拷贝只会复制这些可变对象的引用,而不会复制它们的内容。

下面是一个示例代码,演示了浅拷贝的行为:

import copy

# 原始列表
original_list = [1, 2, [3, 4]]

# 浅拷贝
shallow_copied_list = copy.copy(original_list)

# 修改原始列表中子对象的值
original_list[2][0] = 5

print(original_list)  # 输出: [1, 2, [5, 4]]
print(shallow_copied_list)  # 输出: [1, 2, [5, 4]]

在上面的示例中,我们首先创建了一个包含原始列表 [1, 2, [3, 4]] 的列表对象 original_list。然后,我们使用 copy.copy() 方法创建了一个浅拷贝 shallow_copied_list。接着,我们修改了原始列表中子对象的值,并打印了原始列表和浅拷贝后的列表。可以看到,由于浅拷贝只复制了子对象的引用,所以修改原始列表中子对象的值也会影响到浅拷贝后的列表。

深拷贝

与浅拷贝不同,深拷贝会完全复制一个对象及其所有的子对象。在Python中,深拷贝可以使用 copy 模块的 deepcopy() 方法来实现。

下面是一个示例代码,演示了深拷贝的行为:

import copy

# 原始列表
original_list = [1, 2, [3, 4]]

# 深拷贝
deep_copied_list = copy.deepcopy(original_list)

# 修改原始列表中子对象的值
original_list[2][0] = 5

print(original_list)  # 输出: [1, 2, [5, 4]]
print(deep_copied_list)  # 输出: [1, 2, [3, 4]]

在上面的示例中,我们同样创建了一个原始列表 original_list,然后使用 copy.deepcopy() 方法创建了一个深拷贝 deep_copied_list。接着,我们修改了原始列表中子对象的值,并打印了原始列表和深拷贝后的列表。可以看到,由于深拷贝会完全复制所有子对象,所以修改原始列表中子对象的值不会影响到深拷贝后的列表。

总结

总的来说,深拷贝会复制对象及其子对象的所有内容,而浅拷贝只会复制对象本身,而不会复制其子对象。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程