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

Python内存管理:赋值、浅拷贝与深拷贝解析

赋值与共享资源

在Python中,直接赋值操作(如 list2 = list1)会导致两个变量共享同一个内存地址。这意味着对 list1 的修改会直接影响到 list2,因为它们指向同一个对象。

  • 注意: 赋值等于完全共享资源
  •  如果我们不希望这样完全共享,可以使用浅拷贝和深拷贝
  • 导入copy模块
list1 = [1,2,3,4,5]
print(list1)
list2 = list1
print(list2)
list1.append(6)
print(list1)
print(list2)

浅拷贝

浅拷贝通过 copy.copy() 实现,它创建一个新的对象,但只拷贝第一层的数据。嵌套层的数据仍然指向原来的内存地址。

  • 优点:拷贝速度快,占用空间少,拷贝效率高
import copy
list3 = [1,2,3,4,5,[6,7,8]]
list4 = copy.copy(list3)
print("list3内存地址:%s"%(id(list3)))
print("list4内存地址:%s"%(id(list4)))
print("list3内存嵌套地址:%s"%(id(list3[5])))
print("list4内存嵌套地址:%s"%(id(list4[5])))
list3.append(8)
list3[5].append(100)
print(list3)
print(list4)

深拷贝

深拷贝通过 copy.deepcopy() 实现,它完全拷贝所有层的数据,新对象与原对象完全不共享内存地址。

list5 = [1,2,3,4,5,[6,7,8]]
list6 = copy.deepcopy(list5)
print("list5内存地址:%s"%(id(list5)))
print("list6内存地址:%s"%(id(list6)))
print("list5内存嵌套地址:%s"%(id(list5[5])))
print("list6内存嵌套地址:%s"%(id(list6[5])))
list5.append(100)
list5[5].append(1000)
print(list5)
print(list6)

可变对象与不可变对象

可变对象(如列表、字典、集合)在修改时内存地址不变,

而不可变对象(如数值类型、字符串、元组)在修改时会生成新的对象,分配新的内存空间。

list7 = [1,2,3,4,5]
print("list7的原内存地址%s"%(id(list7)))
list7.append(5)
print("list7增加数据后的内存地址%s"%(id(list7)))int1 = 10
print("int1的原内存地址%s"%(id(int1)))
int1 = 100
print("int1的原内存地址%s"%(id(int1)))str1 = "hello"
print("str1的内存地址%s"%(id(str1)))
str1 = "nihao"
print("str1的内存地址%s"%(id(str1)))tuple1 = (1,2,3,4,5)
print("tuple1的内存地址%s"%(id(tuple1)))
tuple1 = (2,3,4,5,6)
print("tuple1的内存地址%s"%(id(tuple1)))

相关文章:

  • 数智管理学(九)
  • 【匹配】Smith-Waterman
  • 【高频面试题】LRU缓存
  • JavaScript - 运算符之逗号操作符与逗号分隔符(逗号操作符概述、逗号操作符用法、逗号分隔符、逗号分隔符用法)
  • Miniconda介绍介绍和使用
  • Unix Bourne Shell
  • 已解决(亲测有效!):安装部署Docker Deskpot之后启动出现Docker Engine Stopped!
  • ollama 重命名模型
  • Vue.js---避免无限递归循环 调度执行
  • Elasticsearch 常用语法手册
  • [吾爱出品] 中医问诊辅助记录软件
  • ES常识8:ES8.X如何实现热词统计
  • CPU cache基本原理
  • 基于javaweb的JSP+Servlet家政服务系统设计与实现(源码+文档+部署讲解)
  • 2900. 最长相邻不相等子序列 I
  • Windows注册表备份与恢复指南
  • AI大模型:(二)2.5 人类对齐训练自己的模型
  • JDK 1.8 全解析:从核心特性到企业实战的深度实践
  • WEB安全--Java安全--LazyMap_CC1利用链
  • 技术更新频繁,团队如何适应变化
  • 俄代表团:16日上午将继续“等候乌代表团”
  • 上海黄浦江挡潮闸工程建设指挥部成立,组成人员名单公布
  • 【社论】打破“隐形高墙”,让老年人更好融入社会
  • 爱德华多·阿拉纳宣誓就任秘鲁新总理
  • 商务部新闻发言人就暂停17家美国实体不可靠实体清单措施答记者问
  • 被前男友泼汽油致残后,一个女孩经历的双重灼烧