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)

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


相关文章
|
3月前
|
API Python
python中copy模块的使用,深拷贝和浅拷贝
python中copy模块的使用,深拷贝和浅拷贝
33 0
|
4月前
|
数据处理 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
553 1
|
5月前
|
Python
Python教程:一文了解Python的深拷贝与浅拷贝
理解 Python 中的深拷贝(deep copy)和浅拷贝(shallow copy)是非常重要的,特别是在处理嵌套结构的数据时。让我们深入探讨这两个概念,并通过代码示例进行说明。
146 4
|
6月前
|
Java 程序员 Python
python学习13-面向对象的三大特征、特殊方法和特殊属性、类的浅拷贝和深拷贝
python学习13-面向对象的三大特征、特殊方法和特殊属性、类的浅拷贝和深拷贝
|
11月前
|
Shell Python
Python(三十二)python类的浅拷贝与深拷贝
Python中的对象复制,深拷贝与浅拷贝
48 1
|
JSON 编解码 Linux
Python笔记1(赋值、浅拷贝和深拷贝、字符串日期转换、argparse、sys、overwrite、eval、json.dumps/json.loads、os.system(cmd)、zfill)
Python笔记1(赋值、浅拷贝和深拷贝、字符串日期转换、argparse、sys、overwrite、eval、json.dumps/json.loads、os.system(cmd)、zfill)
68 0
Python笔记1(赋值、浅拷贝和深拷贝、字符串日期转换、argparse、sys、overwrite、eval、json.dumps/json.loads、os.system(cmd)、zfill)
|
6月前
|
Python
Python3 list 浅拷贝,深拷贝
Python3 list 浅拷贝,深拷贝
37 0
|
存储 Python
Python中浅拷贝与深拷贝
Python中浅拷贝与深拷贝
|
机器学习/深度学习 C++ Python
Python应用专题 | 8:字典内存释放及其浅拷贝和深拷贝之间的区别
本文主要介绍字典内存释放及其浅拷贝和深拷贝之间的区别
|
人工智能 Java BI
Python|赋值、浅拷贝与深拷贝
Python|赋值、浅拷贝与深拷贝
80 0
下一篇
无影云桌面