对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实现类的静态变量用法实例
May 08 Python
Python中str.format()详解
Mar 12 Python
Python有序查找算法之二分法实例分析
Dec 11 Python
python实现简易云音乐播放器
Jan 04 Python
Python中使用Counter进行字典创建以及key数量统计的方法
Jul 06 Python
opencv python 2D直方图的示例代码
Jul 20 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
Python 实现OpenCV格式和PIL.Image格式互转
Jan 09 Python
Python字符编码转码之GBK,UTF8互转
Feb 09 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
Jul 30 Python
Python pysnmp使用方法及代码实例
Aug 24 Python
python中pop()函数的语法与实例
Dec 01 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
PHP学习笔记之数组篇
2011/06/28 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
php微信开发之图片回复功能
2018/06/14 PHP
16个最流行的JavaScript框架[推荐]
2011/05/29 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
2014/09/26 NodeJs
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
vue数据传递--我有特殊的实现技巧
2018/03/20 Javascript
原生JS实现留言板功能
2020/02/08 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
解决iview table组件里的 固定列 表格不自适应的问题
2020/11/13 Javascript
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
Python复制文件操作实例详解
2015/11/10 Python
python入门前的第一课 python怎样入门
2018/03/06 Python
基于python指定包的安装路径方法
2018/10/27 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
keras在构建LSTM模型时对变长序列的处理操作
2020/06/29 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
机械系大学毕业生推荐信
2013/11/27 职场文书
退休教师欢送会主持词
2014/03/31 职场文书
《诚实与信任》教学反思
2014/04/10 职场文书
关于车尾的标语大全
2015/08/11 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
JS如何使用剪贴板操作Clipboard API
2021/05/17 Javascript
详解java如何集成swagger组件
2021/06/21 Java/Android
叶县这家生产军用电台的兵工厂,人称“四机部”,走出一上将
2022/02/18 无线电