python中的浅拷贝和深拷贝

在Python中,浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是复制对象的两种方式,它们在处理复杂对象(如包含其他对象的对象)时表现出不同的行为。

浅拷贝
浅拷贝创建一个新对象,但不会递归复制对象内部的子对象。子对象的引用会被复制到新对象中,因此原始对象和拷贝对象会共享内部的子对象。

import copy

# 创建一个包含其他列表的列表
original_list = [[1, 2, 3], [4, 5, 6]]

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

# 修改原始列表中的子列表
original_list[0][0] = 'X'

print(original_list)         # 输出: [['X', 2, 3], [4, 5, 6]]
print(shallow_copied_list)   # 输出: [['X', 2, 3], [4, 5, 6]]

在这个例子中,修改original_list中的一个子元素同时影响了shallow_copied_list,因为两者共享相同的子对象。

深拷贝
深拷贝创建一个新对象,并递归复制原始对象内部的所有子对象。结果是创建了一个完全独立的对象,不与原始对象共享任何内容。

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

# 修改原始列表中的子列表
original_list[0][0] = 'Y'

print(original_list)         # 输出: [['Y', 2, 3], [4, 5, 6]]
print(deep_copied_list)      # 输出: [['X', 2, 3], [4, 5, 6]]

在这个例子中,即使修改original_list,deep_copied_list也保持不变,因为它是一个完全独立的拷贝。

原理
浅拷贝:只复制对象本身和对象内最顶层的内容,内部嵌套的对象不会被复制,只复制对这些嵌套对象的引用。
深拷贝:复制对象及其所有嵌套的对象,递归地创建所有子对象的拷贝。深拷贝生成的对象完全独立于原始对象。

相关推荐

  1. 说说Python拷贝拷贝

    2024-04-02 18:12:03       46 阅读
  2. python拷贝拷贝

    2024-04-02 18:12:03       22 阅读
  3. python拷贝拷贝

    2024-04-02 18:12:03       28 阅读
  4. js拷贝拷贝区别

    2024-04-02 18:12:03       44 阅读
  5. js拷贝拷贝区别

    2024-04-02 18:12:03       45 阅读
  6. 拷贝拷贝

    2024-04-02 18:12:03       17 阅读

最近更新

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

    2024-04-02 18:12:03       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-02 18:12:03       5 阅读
  3. 在Django里面运行非项目文件

    2024-04-02 18:12:03       4 阅读
  4. Python语言-面向对象

    2024-04-02 18:12:03       6 阅读

热门阅读

  1. go中继承、多态的模拟实现

    2024-04-02 18:12:03       15 阅读
  2. Go build 交叉编译-实现多平台兼容

    2024-04-02 18:12:03       19 阅读
  3. 【无标题】

    2024-04-02 18:12:03       15 阅读
  4. 页面中的图片,以后可不能随便使用了!

    2024-04-02 18:12:03       17 阅读
  5. 常见的两种git工作流分支模型

    2024-04-02 18:12:03       21 阅读
  6. C语言经典面试题目(二十四)

    2024-04-02 18:12:03       20 阅读
  7. Android 使用LeakCanary检测内存泄漏,分析原因

    2024-04-02 18:12:03       20 阅读
  8. 【Python进阶(三)】——面向对象编程

    2024-04-02 18:12:03       31 阅读
  9. linux开启启动配置

    2024-04-02 18:12:03       20 阅读
  10. Qt 在编辑框中加入按钮控件

    2024-04-02 18:12:03       24 阅读
  11. Linux 内核中PHY子系统(网络):PHY驱动

    2024-04-02 18:12:03       18 阅读
  12. 【C语言】字符串与内存函数

    2024-04-02 18:12:03       22 阅读