python的深浅拷贝

在Python中,深拷贝(deep copy)和浅拷贝(shallow copy)是用于复制对象的两种方式。

先通俗地解释一下深拷贝和浅拷贝。

想象一下你有一个盒子(原始对象),里面装着几本书(数据)。现在你想要复制这个盒子,得到一个全新的一样的盒子(新对象)。这时候就涉及到了深拷贝和浅拷贝的概念。

浅拷贝就像是将原来的盒子完全复制一份。新盒子里放着跟原来盒子相同的书。但是如果其中有些书是其他人也有的,那么两个盒子里放的其实是同样的书。这意味着,如果你在新盒子中加入或移除书籍,那么原来的盒子也会被影响到。因为他们共享同样的引用关系。

而深拷贝则更彻底。它不仅会复制整个盒子,还会将每本书都重新复制一份放进去。这样两个盒子之间没有任何关联,修改其中一个不会对另一个产生影响。

所以说,浅拷贝只复制了外层对象(引用或指针),而深拷贝则逐层地将所有嵌套对象都进行复制。

所以,浅拷贝会创建一个新的对象,并将原始对象的引用复制到新对象中。这意味着修改新对象可能会影响原始对象。而深拷贝则会创建一个全新的独立对象,并且递归地将原始对象及其所有嵌套对象完整复制到新对象中,因此对新对象的任何修改不会影响原始对象。

使用场景:

  1. 浅拷贝适用于需要复制简单数据类型或者只需一层复制的情况。它可以节省内存并提高性能。
  2. 深拷贝适用于需要独立副本,且涉及嵌套或可变数据结构的情况。它确保在修改副本时不会影响到原始数据。

简单示例:

# 浅拷贝示例
import copy

list1 = [1, 2, [3, 4]]
list2 = list1.copy()  # 或者 list2 = copy.copy(list1)
list2[0] = 5
list2[2].append(6)

print(list1)  # [1, 2, [3, 4, 6]]
print(list2)  # [5, 2, [3, 4, 6]]

# 深拷贝示例
import copy

list1 = [1, 2, [3, 4]]
list2 = copy.deepcopy(list1)
list2[0] = 5
list2[2].append(6)

print(list1)  # [1, 2, [3, 4]]
print(list2)  # [5, 2, [3, 4, 6]]

在浅拷贝示例中,修改了列表 list2 的第一个元素和第三个元素的子列表。这导致原始列表 list1 被影响。

而在深拷贝示例中,即使对副本进行了修改,原始列表保持不变。

相关推荐

  1. python深浅拷贝

    2024-01-28 02:24:01       58 阅读
  2. Python程序设计 深浅拷贝

    2024-01-28 02:24:01       50 阅读
  3. Python学习1---深浅拷贝

    2024-01-28 02:24:01       25 阅读
  4. python深度拷贝

    2024-01-28 02:24:01       64 阅读
  5. python深度拷贝

    2024-01-28 02:24:01       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-28 02:24:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-28 02:24:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-28 02:24:01       82 阅读
  4. Python语言-面向对象

    2024-01-28 02:24:01       91 阅读

热门阅读

  1. HTTP协议(简单知识点)

    2024-01-28 02:24:01       57 阅读
  2. 【js大坑】苹果ios的日期时间兼容问题

    2024-01-28 02:24:01       50 阅读
  3. 《Leetcode》动态规划-求不相邻数的最大和

    2024-01-28 02:24:01       57 阅读
  4. 加固安全防线:解决常见漏洞的实用指南

    2024-01-28 02:24:01       55 阅读
  5. ubuntu 编译使用 liblas 读取点云

    2024-01-28 02:24:01       66 阅读
  6. Scikit-Learn 高级教程——高级特征工程

    2024-01-28 02:24:01       58 阅读