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

python---深拷贝浅拷贝

赋值

lis1 = [1,2,3,4,5]
lis2  = lis1 #将lis1赋值给lis2
#给lis1新增元素
lis1.append(6)
print('新增后的lis1',lis1)
print('新增后的lis2',lis2)
#新增后的lis1 [1, 2, 3, 4, 5, 6]
#新增后的lis2 [1, 2, 3, 4, 5, 6]

赋值后完全共享资源,一个值改变另一个也会改变 

浅拷贝

会创建新的对象,拷贝最外层对象,嵌套层会指向原来的内存地址,

import copy  #导入copy模块
li = [1,2,3,[4,5]]  #定义嵌套列表
li2 = copy.copy(li)
print(li)
print(li2)
#查看内存地址
print('li的内存地址是',id(li))
print('li2的内存地址是',id(li2)) 
#[1, 2, 3, [4, 5]]
# [1, 2, 3, [4, 5]]
# li的内存地址是 1856588308288
# li2的内存地址是 1856588305792

内存地址不一样,说明不是同一个对象

li .append(6) #给li添加元素看看li2会不会随之改变
print('li',li)
print('li2',li2)
# li [1, 2, 3, [4, 5], 6]
# li2 [1, 2, 3, [4, 5]]

给嵌套列表添加元素

li[3].append(8)
print('li',li)
print('li2',li2)
# li [1, 2, 3, [4, 5, 8], 6]
# li2 [1, 2, 3, [4, 5, 8]]

说明li与li2嵌套列表内层地址是一样的

总结:浅拷贝外层的内存地址不一样,但是内层的内存地址相同

浅拷贝优点:拷贝速度快,占用空间小,拷贝效率高

深拷贝

外层对象和内部的元素都拷贝了一遍(数据完全不共享)

深拷贝数据变化只影响自己本身

创建一个完全独立的新对象,递归地复制对象及其子对象,确保新对象与原对象完全独立。修改原对象不会影响深拷贝的对象。

import copy
lis1 = [1, 2, 3,[4,5]]
lis2 = copy.deepcopy(lis1)  #深拷贝
#外层添加元素7
lis1.append(7)
print('lis1外层列表添加元素',lis1,id(lis1))
print('lis2外层列表添加元素',lis2,id(lis2))# lis1外层列表添加元素 [1, 2, 3, [4, 5], 7] 2943579811968
# lis2外层列表添加元素 [1, 2, 3, [4, 5]] 2943579805312#嵌套层添加元素6
lis1[3].append(6)
print('lis1内层列表添加元素',lis1,id(lis1[3]))
print('lis2内层列表添加元素',lis2,id(lis2[3]))# lis1内层列表添加元素 [1, 2, 3, [4, 5, 6], 7] 2943579804480
# lis2内层列表添加元素 [1, 2, 3, [4, 5]] 2943579805056

 

http://www.gsyq.cn/news/63276.html

相关文章:

  • Codeforces Round 1066 (Div. 1 + Div. 2) 比赛总结
  • 解决VirtualBox - Error In supR3HardenedWinReSpawn报错
  • 1127随笔
  • gradle的各个环境依赖jar包的同一个版本导致的严重后果
  • 20251127
  • Day26字体图标--上传矢量图
  • 【机器学习】突破分类瓶颈:用逻辑回归与Softmax回归解锁多分类世界 - 指南
  • 双特异性抗体:抗癌 “双面手”,两种模式精准杀伤癌细胞
  • 2025.11.27
  • windows和linux下jar包graalvm打包生native程序 - yebinghuai-qq
  • P31_完整的模型验证套路
  • 赋能第一期 新员工角色转换主题培训
  • DS优化建图
  • 深入解析:Leetcode 43
  • 解读Spring Boot框架中不同位置抛出异常的处理流程
  • tips:LVGL 定时器触发周期不准确(实际间隔 设定间隔)问题排查与解决方案
  • 第6章 基于应变的单轴疲劳分析 11
  • C++写有一个2D 小游戏(贪吃蛇)
  • CF2157C Meximum Array 2
  • AT_fps_24_b 整数の組
  • 第五十篇
  • 我踩坑后总结:企业微信客服API接入客服系统,90%的人都搞错了!
  • 香橙派上进行MQTT数据存储客户端开发(一)基本环境配置
  • 编程中的枚举法与数学上的穷举法有何区别?
  • 《程序员修炼之道:从小工到专家》阅读笔记5
  • C# 图片加载引发的内存溢出异常
  • Mac 安装 4K Video Downloader v5.0.0.5303-1.dmg 方法(附安装包)
  • TPS的另外一层含义:绝对并发用户数 - BKY007
  • 笔记——OI中求逆元的几种方式(不含数学知识的讲解)
  • 2025国内公关公司排名推荐(整合权威数据源):十大机构深度对比,专业分析与选择指南