• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > 深入理解python中的浅拷贝和深拷贝

深入理解python中的浅拷贝和深拷贝

作者:jingxian 字体:[增加 减小] 来源:互联网

jingxian 通过本文主要向大家介绍了python 拷贝文件,python 深拷贝,python 拷贝,python 浅拷贝,python 浅拷贝 深拷贝等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在讲什么是深浅拷贝之前,我们先来看这样一个现象:

a = ['scolia', 123, [], ]
b = a[:]
b[2].append(666)
print a
print b
</div>

为什么我只对b进行修改,却影响到了a呢?看过我在之前的文章中就说过:序列中保存的都是内存的引用。

所以,当我们通过b去修改里面的空列表的时候,其实就是修改内存中的同一个对象,所以会影响到a。

a = ['scolia', 123, [], ]
b = a[:]
print id(a), id(a[0]), id(a[1]), id(a[2])
print id(b), id(b[0]), id(b[1]), id(b[2])
</div>

代码验证无误,所以虽然a和b是两个不同的对象,但是里面的引用都是一样的。这就是所谓新的对象,旧的内容。

但是,浅拷贝还不仅如此,看下面:

a = ['scolia', 123, [], ]
b = a[:]
b[1] = 666
print a
print b
</div>

这又是怎么回事呢?

看过我在python变量赋值说明的同学会知道:对于字符串、数字等不可变的数据类型,修改就相当于重新赋值。在这里就相当于刷新引用。

代码验证一下:

a = ['scolia', 123, [], ]
b = a[:]
b[1] = 666
print id(a), id(a[0]), id(a[1]), id(a[2])
print id(b), id(b[0]), id(b[1]), id(b[2])
</div>

看来是正确的。

上面讲的这些就是浅拷贝,总结起来,浅拷贝只是拷贝了一系列引用,当我们在拷贝出来的对象对可修改的数据类型进行修改的时候,并没有改变引用,所以会影响原对象。而对不可修改的对象进行修改的是,则是新建了对象,刷新了引用,所以和原对象的引用不同,结果也就不同。

创建浅拷贝的方法:

1.切片操作

2.使用list()工厂函数新建对象。( b = list(a) )

那么深拷贝不就是将里面引用的对象重新创建了一遍并生成了一个新的一系列引用。

基本上是这样的,但是对于字符串、数字等不可修改的对象来说,重新创建一份似乎有点浪费内存,反正你到时要修改的时候都是新建对象,刷新引用的。所以还用原来的引用也无所谓,还能达到节省内存的目的。

看下代码验证:

from copy import deepcopy
a = ['scolia', 123, [], ]
b = deepcopy(a)
b[1] = 666
print id(a), id(a[0]), id(a[1]), id(a[2])
print id(b), id(b[0]), id(b[1]), id(b[2])
</div>

验证正确。

深拷贝的创建:

1.正如代码示例用一样,只能通过内置的copy模块的deepcopy()方法创建。

好了,关于深浅拷贝的问题就先说到这里,有什么错误或需要补充的以后会继续。

以上这篇深入理解python中的浅拷贝和深拷贝就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

</div>

您可能想查找下面的文章:

  • Python实现拷贝多个文件到同一目录的方法
  • 深入理解python中的浅拷贝和深拷贝
  • Python中的深拷贝和浅拷贝详解
  • Python浅拷贝与深拷贝用法实例
  • 解析Python中的变量、引用、拷贝和作用域的问题
  • Python中的赋值、浅拷贝、深拷贝介绍
  • Python中的引用和拷贝浅析
  • Python中的引用和拷贝浅析
  • 用python实现的可以拷贝或剪切一个文件列表中的所有文件

相关文章

  • 简单分析Python中用fork()函数生成的子进程
  • python 使用get_argument获取url query参数
  • python在Windows8下获取本机ip地址的方法
  • python中set常用操作汇总
  • 解决Python requests 报错方法集锦
  • python 从远程服务器下载东西的代码
  • Python日期操作学习笔记
  • Python自定义主从分布式架构实例分析
  • python妹子图简单爬虫实例
  • python使用urllib2模块获取gravatar头像实例

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python中SOAP项目的介绍及其在web开发中的应用
    • Python下载指定页面上图片的方法
    • Python 多线程抓取图片效率对比
    • Python获取当前路径实现代码
    • Windows下Python使用Pandas模块操作Excel文件的教程
    • 跟老齐学Python之编写类之二方法
    • python使用PyV8执行javascript代码示例分享
    • Python中类型检查的详细介绍
    • python用来获得图片exif信息的库实例分析
    • Python MD5文件生成码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有