对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 Web框架Flask信号机制(signals)介绍
Jan 01 Python
Python selenium 三种等待方式详解(必会)
Sep 15 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
Dec 20 Python
Python元组及文件核心对象类型详解
Feb 11 Python
python模块smtplib学习
May 22 Python
Python使用tkinter库实现文本显示用户输入功能示例
May 30 Python
Python小进度条显示代码
Mar 05 Python
Python3直接爬取图片URL并保存示例
Dec 18 Python
在jupyter notebook 添加 conda 环境的操作详解
Apr 10 Python
在Sublime Editor中配置Python环境的详细教程
May 03 Python
Python urllib3软件包的使用说明
Nov 18 Python
python基于爬虫+django,打造个性化API接口
Jan 21 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正则
2006/07/07 PHP
获得Google PR值的PHP代码
2007/01/28 PHP
Session的工作机制详解和安全性问题(PHP实例讲解)
2014/04/10 PHP
基于PHP制作验证码
2016/10/12 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
js判断鼠标左、中、右键哪个被点击的方法
2015/01/27 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
js实现复选框的全选和取消全选效果
2017/01/03 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
小程序外卖订单界面的示例代码
2019/12/30 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
ant design的table组件实现全选功能以及自定义分页
2020/11/17 Javascript
[02:41]《西雅图我们来了》2015国际邀请赛出征全记录
2015/07/23 DOTA
深入理解python中的select模块
2017/04/23 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
Pandas聚合运算和分组运算的实现示例
2019/10/17 Python
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
幼儿园家长会邀请函
2014/01/15 职场文书
公司廉洁自律承诺书
2014/03/27 职场文书
《荷花》教学反思
2014/04/16 职场文书
乡镇党的群众路线对照检查材料
2014/09/24 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
财务部岗位职责范本
2015/04/14 职场文书
三八节活动主持词
2015/07/04 职场文书
2016年清明节红领巾广播稿
2015/12/17 职场文书
MySQL子查询中order by不生效问题的解决方法
2021/08/02 MySQL
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android