当前位置: 首页 > news >正文

a=b、深拷贝和浅拷贝

a=b、深拷贝和浅拷贝

      • 1. `b = a`:同一对象的"别名"
      • 2. `b = a[:]` 或 `b = a.copy()`:浅拷贝("半独立"副本)
      • 3. `b = copy.deepcopy(a)`:深拷贝("完全独立"副本)
      • 用二维列表举例验证

1. b = a:同一对象的"别名"

  • 本质:ba 指向同一块内存地址,是同一个对象的两个名字。
  • 表现:无论修改 ab 的任何层级(浅层、深层),两者都会完全同步变化
  • 类比:相当于给同一个文件创建了一个快捷方式,操作快捷方式和原文件会影响同一个文件。

2. b = a[:]b = a.copy():浅拷贝("半独立"副本)

  • 本质:创建新的外层对象,但外层对象中存储的嵌套引用(如二维数组的行) 仍指向原对象的嵌套结构。
  • 表现:
    • 浅层内容(如一维列表的元素、字典的顶层键值对)的修改,只会影响新对象,原对象不受影响
    • 嵌套结构(如二维列表的子列表、字典中的嵌套字典)的修改,会同步影响原对象(因为共享嵌套结构的地址)。
  • 类比:相当于复制了一个文件夹,文件夹本身是新的,但里面的子文件是原文件的快捷方式,修改子文件会影响原文件。

3. b = copy.deepcopy(a):深拷贝("完全独立"副本)

  • 本质:创建全新的对象,并递归复制所有层级的内容(包括最深层的嵌套结构),新对象与原对象没有任何内存共享
  • 表现:无论修改 b 的浅层还是深层内容,a不会有任何变化,两者完全独立。
  • 类比:相当于把文件夹及里面所有子文件都完整复制了一份,新文件夹和原文件夹毫无关联,修改任何内容都互不影响。

用二维列表举例验证

import copya = [1, 2, [3, 4]]  # 一维元素 + 嵌套列表(二维结构)# 1. 直接赋值
b = a
b[0] = 100          # 修改浅层
b[2].append(5)      # 修改嵌套
print(a)  # [100, 2, [3, 4, 5]](全受影响)# 2. 浅拷贝(a[:] 或 a.copy())
a = [1, 2, [3, 4]]  # 重置a
c = a.copy()
c[0] = 100          # 修改浅层
c[2].append(5)      # 修改嵌套
print(a)  # [1, 2, [3, 4, 5]](仅嵌套受影响)# 3. 深拷贝
a = [1, 2, [3, 4]]  # 重置a
d = copy.deepcopy(a)
d[0] = 100          # 修改浅层
d[2].append(5)      # 修改嵌套
print(a)  # [1, 2, [3, 4]](完全不受影响)

这三种操作的核心差异就在于内存共享的程度:完全共享(b=a)→ 部分共享(浅拷贝)→ 完全不共享(深拷贝)。

http://www.dtcms.com/a/309868.html

相关文章:

  • pycharm快捷键设置为和vscode一样
  • 日志管理工具 ——Graylog
  • 外卖“0元购”退场后,即时零售大战才刚开始
  • 一个可以检测本机的字节顺序,并对任意数据进行字节顺序的反转操作的代码。
  • 学习设计模式《二十》——解释器模式
  • GenieWizard: Multimodal App Feature Discovery with LargeLanguage Models
  • 解决IDEA无法克隆GitHub上的工程的问题
  • 【VSCode】常用插件推荐(持续更新~)
  • Leetcode 10 java
  • python基础语法4,函数(简单易上手的python语法教学)课后习题
  • Spyglass CDC basic concept
  • 【案例教程】基于生命周期评价法的农田温室气体排放估算、农田CH4和N2O排放模拟、DSSAT模型农田碳库模型和土壤呼吸
  • 中央厨房选址:五维权衡术
  • Apache RocketMQ 中 Producer(生产者)的详细说明
  • 【string类常见接口】
  • Docker设置容器时间
  • LeetCode热题100——146. LRU 缓存
  • 在各种操作系统上安装 Ansible
  • Git之远程仓库
  • 《Uniapp-Vue 3-TS 实战开发》实现自定义头部导航栏
  • 基于coze studio开源框架二次定制开发教程
  • 乐创E20H1型IO从站与Ethercat转Profinet网关转换器的配置应用案例
  • SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:日志管理(四)集成Spring Security
  • 校园交友|基于SprinBoot+vue的校园交友网站(源码+数据库+文档)
  • 【前端】CSS Grid布局介绍及示例
  • ThingsKit Edge边缘计算平台是什么?
  • Android Jetpack 系列(五)Room 本地数据库实战详解
  • 8.1 简单计数题
  • RS485 总线电阻匹配技术
  • 两个服务之间的大规模数据推送