Python基础教程之浅拷贝和深拷贝实例详解

发布时间 - 2026-01-11 02:21:25    点击率:

Python基础教程之浅拷贝和深拷贝实例详解

           网上关于Python的深拷贝和浅拷贝的文章很多,这里对三种拷贝进行比较并附实例,大家可以参考下

一般的复制

#encoding:utf-8
#定义一个嵌套集合
lista=[1,2,3,[4,5,6,[7,8,9]]]

listb=lista
#分别打印出 lista和listb的地址值
print id(lista) #4511103096
print id(listb) #4511103096

#修改lista中的内容,listb中的内容也会跟着修改

lista[0]=0
print lista #[0, 2, 3, [4, 5, 6, [7, 8, 9]]]
print listb #[0, 2, 3, [4, 5, 6, [7, 8, 9]]]

通过以上实践会发现,复制操作就是将lista在内存中指向的地址,也让listb指向他,本身并没有在内存中创建地址。

浅拷贝

#encoding:utf-8
#定义一个嵌套集合
import copy
lista=[1,2,3,[4,5,6,[7,8,9]]]
#使用copy模块中copy方法
listb=copy.copy(lista)

print id(lista) #4396231640

print id(listb) #4396231712

#发现lista和listb在内存中的地址有区别,
#打印元素中的第一个元素的地址值
print id(lista[0])#140666751466536

print id(listb[0])#140666751466536

#元素的地址值是一样的,是不是意思就是,改变lista中的第一个元素,
# listb中的也要改变呢

lista[0]=0

print lista #[0, 2, 3, [4, 5, 6, [7, 8, 9]]]

print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]]

#结果发现,竟然没有跟着lista一起改变,为什么呢,因为使用了浅拷贝呗
#我们在打印下lista[0]和listb[0]的地址
print id(lista[0]) #140666751466560

print id(listb[0]) #140666751466536

#会发现lista[0]重新指向内存中的其他地址


#这时候可以通过以上的方法,修改lista[3],lista[3]也是一个list

print id(lista[3])#4499779240

print id(listb[3])#4499779240

#修改lista[3]中第一个元素呢

lista[3][0]=0

print lista #[0, 2, 3, [0, 5, 6, [7, 8, 9]]]

print listb #[0, 2, 3, [0, 5, 6, [7, 8, 9]]]

#发现修改lista[3][0]元素的值,listb[3][0]也会跟着改变

根据以上实践说明,浅拷贝对对象中对象没有拷贝。

深拷贝

  #encoding:utf-8
  #定义一个嵌套集合
  import copy
  lista=[1,2,3,[4,5,6,[7,8,9]]]

  #深拷贝功能是在浅拷贝上做的加强,所以具备浅拷贝的功能
  listb=copy.deepcopy(lista)

  lista[3][0]=0

  print lista #[1, 2, 3, [0, 5, 6, [7, 8, 9]]]

  print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]]

  #深拷贝会解决修改lista[3][0]值不会影响listb中的值

  #再来修改下第三层列表中元素是不是也完成拷贝

  lista[3][3][0]=0

  print lista #[1, 2, 3, [0, 5, 6, [0, 8, 9]]]

  print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]]

  #没有受到任何影响

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Python  # 浅拷贝  # 深拷贝  # 深拷贝与浅拷贝及复制  # Python中的赋值、浅拷贝、深拷贝介绍  # Python中的深拷贝和浅拷贝详解  # 对python append 与浅拷贝的实例讲解  # Python中字典的浅拷贝与深拷贝用法实例分析  # Python对象的深拷贝和浅拷贝详解  # 对Python中列表和数组的赋值  # 浅拷贝和深拷贝的实例讲解  # 第一个  # 也会  # 是在  # 也要  # 可以通过  # 希望能  # 再来  # 三种  # 什么呢  # 谢谢大家  # 也让  # 上做  # 对对  # 第三层  # 象中  # 并附  # 这时候  # 使用了  # 和深  # 是一样的 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  如何用狗爹虚拟主机快速搭建网站?  在线制作视频网站免费,都有哪些好的动漫网站?  实例解析angularjs的filter过滤器  Java类加载基本过程详细介绍  Laravel如何使用Telescope进行调试?(安装和使用教程)  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  如何确保西部建站助手FTP传输的安全性?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  Android利用动画实现背景逐渐变暗  音响网站制作视频教程,隆霸音响官方网站?  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  如何用西部建站助手快速创建专业网站?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  香港服务器部署网站为何提示未备案?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  如何快速搭建高效香港服务器网站?  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  如何用虚拟主机快速搭建网站?详细步骤解析  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  如何基于云服务器快速搭建个人网站?  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Python自动化办公教程_ExcelWordPDF批量处理案例  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  javascript中的try catch异常捕获机制用法分析  如何快速登录WAP自助建站平台?  如何破解联通资金短缺导致的基站建设难题?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  北京专业网站制作设计师招聘,北京白云观官方网站?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  在Oracle关闭情况下如何修改spfile的参数  昵图网官方站入口 昵图网素材图库官网入口  如何在景安云服务器上绑定域名并配置虚拟主机?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  深圳网站制作的公司有哪些,dido官方网站?  Laravel如何使用模型观察者?(Observer代码示例)  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】