对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抓取京东图书评论数据
Aug 31 Python
在Python中用has_key()方法查找键是否存在的教程
May 21 Python
Python3字符串学习教程
Aug 20 Python
python文件操作相关知识点总结整理
Feb 22 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
解决Python pandas df 写入excel 出现的问题
Jul 04 Python
python模拟菜刀反弹shell绕过限制【推荐】
Jun 25 Python
pytorch之添加BN的实现
Jan 06 Python
python通过文本在一个图中画多条线的实例
Feb 21 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
Apr 27 Python
解决Python安装cryptography报错问题
Sep 03 Python
python里反向传播算法详解
Nov 22 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获取服务器端信息的方法
2014/11/28 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
PHP的PDO预定义常量讲解
2019/01/24 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
csdn 博客的css样式 v3
2009/02/24 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
Python判断文件和字符串编码类型的实例
2017/12/21 Python
解决python 输出是省略号的问题
2018/04/19 Python
python查看模块安装位置的方法
2018/10/16 Python
Python中常用的内置方法
2019/01/28 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
HTML5 Canvas中使用用路径描画圆弧
2015/01/01 HTML / CSS
美国女孩服装购物网站:Justice
2017/03/04 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
cf收人广告词大全
2014/03/14 职场文书
表彰大会策划方案
2014/05/13 职场文书
日语专业求职信
2014/07/04 职场文书
会计学专业求职信
2014/07/17 职场文书
群众路线查摆问题整改措施思想汇报
2014/10/10 职场文书
工作检讨书范文
2015/01/23 职场文书
保护动物的宣传语
2015/07/13 职场文书
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android
Nginx 匹配方式
2022/05/15 Servers
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android