对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实现的阳历转阴历(农历)算法
Apr 25 Python
Python中的__SLOTS__属性使用示例
Feb 18 Python
Python 类与元类的深度挖掘 II【经验】
May 06 Python
浅谈python迭代器
Nov 08 Python
django文档学习之applications使用详解
Jan 29 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
Feb 11 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
python实现微信小程序自动回复
Sep 10 Python
Python小进度条显示代码
Mar 05 Python
python实现图像拼接
Mar 05 Python
Python判断字符串是否为空和null方法实例
Apr 26 Python
PyQt5 文本输入框自动补全QLineEdit的实现示例
May 13 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源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
php若干单维数组遍历方法的比较
2011/09/20 PHP
thinkphp使用literal防止模板标签被解析的方法
2014/11/22 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
2016/11/23 PHP
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
2014/12/10 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
jQuery CSS3自定义美化Checkbox实现代码
2016/05/12 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
Vue.js样式动态绑定实现小结
2019/01/24 Javascript
如何在Angular应用中创建包含组件方法示例
2019/03/23 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
VUE : vue-cli中去掉路由中的井号#操作
2020/09/04 Javascript
Python语言描述连续子数组的最大和
2018/01/04 Python
Python数据结构之双向链表的定义与使用方法示例
2018/01/16 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
详解python中groupby函数通俗易懂
2020/05/14 Python
波兰补充商店:Muscle Power
2018/10/29 全球购物
银行实习的自我鉴定
2013/12/10 职场文书
法学个人求职信范文
2014/01/27 职场文书
教师节活动主持词
2014/04/02 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
捐款仪式主持词
2015/07/04 职场文书
Python代码实现双链表
2022/05/25 Python