Python 中浅拷贝(copy)和深拷贝(deepcopy)

简介: Python 中浅拷贝(copy)和深拷贝(deepcopy)

1. 浅拷贝:

  • 它创建一个新的对象,但对于原始对象内的子对象(如列表中的嵌套列表),只是复制了引用。例如:

import copy original_list = [1, 2, 3]

shallow_copied_list = copy.copy(original_list)


original_list.append(4)


print("原始列表:", original_list)


print("浅拷贝列表:", shallow_copied_list)

2. 深拷贝:

  • 会递归地复制原始对象及其所有子对象,创建出完全独立的副本。
  • 比如:

original_nested_list = [[1, 2], 3]

deep_copied_nested_list = copy.deepcopy(original_nested_list) original_nested_list[0].append(4)


print("原始嵌套列表:", original_nested_list)


print("深拷贝嵌套列表:", deep_copied_nested_list)


3. 浅拷贝和深拷贝主要有以下区别:

对于简单对象(如不可变对象)

表现类似,都创建了一个新的对象来表示。

对于复合对象(如包含嵌套结构的对象):

  • 引用处理不同:浅拷贝只是复制了最外层对象和其直接包含的子对象的引用,而深拷贝会递归地复制所有层次的子对象,生成全新的、独立的对象结构。
  • 修改影响不同:修改原始对象中的子对象,浅拷贝得到的对象对应的子对象也会受到影响,因为它们指向相同的内存地址;而深拷贝得到的对象中的子对象不会受到任何影响。

# 简单对象

a = 5

shallow_a = copy.copy(a)

deep_a = copy.deepcopy(a)

a = 10

print("浅拷贝后:", shallow_a)

print("深拷贝后:", deep_a)


# 列表

list1 = [1, 2, 3]

shallow_list1 = copy.copy(list1)

deep_list1 = copy.deepcopy(list1)


list1.append(4)

print("浅拷贝后:", shallow_list1)

print("深拷贝后:", deep_list1)


# 复合对象

list1 = [1, 2, [3, 4]]

shallow_list1 = copy.copy(list1)

deep_list1 = copy.deepcopy(list1)


list1[2].append(5)


print("浅拷贝后:", shallow_list1)

print("深拷贝后:", deep_list1)

可以看到,浅拷贝后修改原始列表中的嵌套列表,浅拷贝的结果也跟着变了,而深拷贝的结果则不受影响。


相关文章
|
数据处理 Python
【Python】已解决:SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFram
【Python】已解决:SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFram
3241 1
|
Python
Python教程:一文了解Python的深拷贝与浅拷贝
理解 Python 中的深拷贝(deep copy)和浅拷贝(shallow copy)是非常重要的,特别是在处理嵌套结构的数据时。让我们深入探讨这两个概念,并通过代码示例进行说明。
872 4
|
API Python
python中copy模块的使用,深拷贝和浅拷贝
python中copy模块的使用,深拷贝和浅拷贝
834 0
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1878 102
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
614 104
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
493 103
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
535 82
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
652 3
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
870 3

推荐镜像

更多