


今天的Python基础篇小知识点讲解浅拷贝与深拷贝,大家这么聪明,一看就会了。

1.直接赋值: 只会复制变量名,共享同一个内存地址,原对象和新对象修改元素都会互相影响。
# 示例:直接赋值original = [1, 2, [3, 4]] # 原列表,包含嵌套列表new = original # 直接赋值# 修改第一层元素original[0] = 99print(original) # [99, 2, [3, 4]]print(new) # [99, 2, [3, 4]] 新对象也变了# 修改嵌套元素original[2][0] = 88print(original) # [99, 2, [88, 4]]print(new) # [99, 2, [88, 4]] 新对象也变了
2.浅拷贝:当父对象不止一层时,只会拷贝父对象的第一层的不可变类型元素,而嵌套的子对象依旧共享地址,第一层元素修改互不影响,嵌套子对象修改互相影响。
import copy# 示例:浅拷贝original = [1, 2, [3, 4]]new = copy.copy(original) # 浅拷贝# 修改第一层元素original[0] = 99print(original) # [99, 2, [3, 4]]print(new) # [1, 2, [3, 4]] 第一层修改互不影响# 修改嵌套的子列表original[2][0] = 88print(original) # [99, 2, [88, 4]]print(new) # [1, 2, [88, 4]] 嵌套对象修改互相影响!
3.深拷贝: 无论父对象有多少层,都会拷贝所有的层级元素,完全独立,原对象和新对象修改完全互不影响。
import copy# 示例:深拷贝original = [1, 2, [3, 4]]new = copy.deepcopy(original) # 深拷贝# 修改第一层元素original[0] = 99print(original) # [99, 2, [3, 4]]print(new) # [1, 2, [3, 4]] 互不影响# 修改嵌套的子列表original[2][0] = 88print(original) # [99, 2, [88, 4]]print(new) # [1, 2, [3, 4]] 依然互不影响!
基于直接赋值、浅拷贝和深拷贝的不同区别进行应用: 如果数据是单层结构(如[1,2,3]),浅拷贝和深拷贝效果一样,用浅拷贝更高效;如果数据是嵌套结构(如 [[1,2], [3,4]]),且需要修改新对象不影响原对象,必须用深拷贝;简单类型(数字、字符串)无需拷贝,因为它们不可变,修改会直接创建新值。



总结:今日我们学习了Python基础篇-Python中的浅拷贝与深拷贝。核心区别在于是否复制嵌套对象的内存地址:直接赋值仅共享同一内存地址,修改会互相影响;浅拷贝仅复制第一层元素地址,外层修改互不影响,但嵌套对象仍共享地址,修改会互相作用;深拷贝则会递归复制所有层级地址,创建完全独立的新对象,原对象与新对象的所有修改均互不影响。总之,单层数据用浅拷贝更高效,嵌套数据若需完全独立则需用深拷贝。在Python基础篇,后续我们将持续学习Python基础知识,祝每一位study er学习愉快。




