程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

新手学Python避坑,学习效率狂飙! 十五、Python 浅拷贝和深拷贝

hfteth 2025-06-12 12:47:24 技术文章 2 ℃

在 Python 里,浅拷贝和深拷贝是处理对象复制时的重要概念,下面将分享下它们的原理、异同、避坑方法,并且给出示例代码。

基本概念

  • 浅拷贝:浅拷贝会创建一个新对象,不过新对象里的子对象依旧是原对象中子对象的引用。也就是说,浅拷贝只复制对象的一层结构,对于对象内部的嵌套对象,只是复制了引用,而非对象本身。
  • 深拷贝:深拷贝会创建一个全新的对象,并且递归地复制原对象的所有子对象。这意味着深拷贝会完全复制对象及其所有嵌套对象,新对象和原对象没有任何引用关联。

异同点

  • 相同点:浅拷贝和深拷贝都会创建一个新的对象。
  • 不同点:浅拷贝仅复制对象的一层结构,新对象的嵌套对象和原对象的嵌套对象共享内存;而深拷贝会递归地复制所有嵌套对象,新对象和原对象完全独立。

避坑方法

  • 浅拷贝:要是原对象的嵌套对象会被修改,那么浅拷贝可能会引发意外的结果,因为新对象和原对象共享嵌套对象的引用。所以,当需要修改嵌套对象时,要使用深拷贝。
  • 深拷贝:深拷贝会递归地复制所有对象,这可能会消耗大量的内存和时间,尤其是在处理大型对象或者有循环引用的对象时。所以,在性能敏感的场景下,要谨慎使用深拷贝。

示例代码

python

import copy

# 定义一个嵌套列表
original_list = [1, 2, [3, 4]]

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

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

# 修改原列表的嵌套列表
original_list[2][0] = 99

print("原列表:", original_list)  # 输出: 原列表: [1, 2, [99, 4]]
print("浅拷贝列表:", shallow_copied_list)  # 输出: 浅拷贝列表: [1, 2, [99, 4]]
print("深拷贝列表:", deep_copied_list)  # 输出: 深拷贝列表: [1, 2, [3, 4]]

在这个示例中,对原列表的嵌套列表进行修改后,浅拷贝列表的嵌套列表也随之改变,这是因为浅拷贝只复制了引用;而深拷贝列表不受影响,这是因为深拷贝创建了一个完全独立的对象。

感谢大家对《新手学Python避坑,学习效率狂飙!》系列的点赞、关注和收藏今天这编是第十五个分享,前面还有十四个,大家可以关注下。

Tags:

最近发表
标签列表