对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解


Posted in Python onJune 28, 2018

对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解

列表赋值:

>>> a = [1, 2, 3]
>>> b = a
>>> print b
[1, 2, 3]
>>> a[0] = 0
>>> print b
[0, 2, 3]

解释:[1, 2, 3]被视作一个对象,a,b均为这个对象的引用,因此,改变a[0],b也随之改变

如果希望b不改变,可以用到切片

>>> b = a[:]
>>> a[0] = 0
>>> print b
[1, 2, 3]

解释,切片a[:]会产生一个新的对象,占用一块新的内存,b指向这个新的内存区域,因此改变a所指向的对象的值,不会影响b

列表深拷贝和浅拷贝

浅拷贝

>>> import copy
>>> a = [1, 2, 3, [5, 6]]
>>> b = copy.copy(a)
>>> print b
[1, 2, 3, [5, 6]]
>>> a[3].append('c')
>>> print b
[1, 2, 3, [5, 6, 'c']]

深拷贝

>>> a = [1, 2, 3, [5, 6]]
>>> b = copy.deepcopy(a)
>>> a[3].append('c')
>>> print b
[1, 2, 3, [5, 6]]

拷贝即是开辟一块新的内存空间,把被拷贝对象中的值复制过去。而浅拷贝并没有为子对象[5,6]开辟一块新的内存空间,而仅仅是实现对a中[5,6]的引用。所以改变a中[5,6]的值,b中的值也会发生变化。

深拷贝则是为子对象也开辟了一块新空间。所以改变a中[5, 6]的值,并不影响b

数组赋值不能用切片来达到相同的目的

>>> import numpy as np
>>> a = np.array([1, 2 ,3])
>>> b = a[:]
>>> a[0] = 5
>>> print a, b
[5 2 3] [5 2 3]

如上,虽然用切片,但不能达到修改a而不影响b的目的。说明a,b仍然指向同一块内存。

此时,只能用拷贝

>>> b = a.copy()
>>> a[0] = 5
>>> print a, b
[5 2 3] [1 2 3]

此时修改a不会影响到b。其中的原因以后进一步深究。

注意,列表的拷贝是copy.copy(obj)或copy.deepcopy(obj),数组的拷贝是obj.copy()

以上这篇对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python httplib,smtplib使用方法
Sep 06 Python
python实现的解析crontab配置文件代码
Jun 30 Python
Python多进程编程技术实例分析
Sep 16 Python
Python编程给numpy矩阵添加一列方法示例
Dec 04 Python
python实现Decorator模式实例代码
Feb 09 Python
python实现比较文件内容异同
Jun 22 Python
python opencv实现图片旋转矩形分割
Jul 26 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
学python安装的软件总结
Oct 12 Python
python3 动态模块导入与全局变量使用实例
Dec 22 Python
python图形开发GUI库pyqt5的基本使用方法详解
Feb 14 Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 23 Python
python实现将读入的多维list转为一维list的方法
Jun 28 #Python
numpy matrix和array的乘和加实例
Jun 28 #Python
python 按不同维度求和,最值,均值的实例
Jun 28 #Python
python 列表,数组和矩阵sum的用法及区别介绍
Jun 28 #Python
python 列表降维的实例讲解
Jun 28 #Python
基于Python中求和函数sum的用法详解
Jun 28 #Python
Python之list对应元素求和的方法
Jun 28 #Python
You might like
WordPress中自定义后台管理界面配色方案的小技巧
2015/12/29 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
基于jquery的兼容各种浏览器的iframe自适应高度的脚本
2010/08/13 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
javascript九宫格图片随机打乱位置的实现方法
2017/03/15 Javascript
Node.js开发第三方微信公众平台
2017/06/05 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
2020/12/14 NodeJs
[01:19:34]2014 DOTA2国际邀请赛中国区预选赛 New Element VS Dream time
2014/05/22 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
[44:37]完美世界DOTA2联赛PWL S3 Forest vs access 第一场 12.11
2020/12/13 DOTA
Python urlopen()函数 示例分享
2014/06/12 Python
python格式化字符串实例总结
2014/09/28 Python
Python导出DBF文件到Excel的方法
2015/07/25 Python
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
Python对象的属性访问过程详解
2020/03/05 Python
Python同时处理多个异常的方法
2020/07/28 Python
实例讲解CSS3中的box-flex弹性盒属性布局
2016/06/09 HTML / CSS
Bjorn Borg官方网上商店:国际运动时尚品牌
2016/08/27 全球购物
电厂厂长岗位职责
2014/01/02 职场文书
先进党员事迹材料
2014/12/24 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书
python爬取某网站原图作为壁纸
2021/06/02 Python
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android