对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多进程编程技术实例分析
Sep 16 Python
Python图形绘制操作之正弦曲线实现方法分析
Dec 25 Python
Python生成rsa密钥对操作示例
Apr 26 Python
python 猴子补丁(monkey patch)
Jun 26 Python
python图像处理模块Pillow的学习详解
Oct 09 Python
python3+opencv生成不规则黑白mask实例
Feb 19 Python
Anaconda+Pycharm环境下的PyTorch配置方法
Mar 13 Python
Python基于数列实现购物车程序过程详解
Jun 09 Python
利用Python发送邮件或发带附件的邮件
Nov 12 Python
使用python实现学生信息管理系统
Feb 25 Python
golang中的空接口使用详解
Mar 30 Python
python中opencv实现图片文本倾斜校正
Jun 11 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
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
jquery绑定事件不生效的解决方法
2014/02/11 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
如何提高Dom访问速度
2017/01/05 Javascript
学好js,这些js函数概念一定要知道【推荐】
2017/01/19 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
jquery+css实现侧边导航栏效果
2017/06/12 jQuery
nodejs接入阿里大鱼短信验证码的方法
2017/07/10 NodeJs
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
前后端如何实现登录token拦截校验详解
2018/09/03 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
python中合并两个文本文件并按照姓名首字母排序的例子
2014/04/25 Python
一步步教你用Python实现2048小游戏
2017/01/19 Python
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
python OpenCV学习笔记实现二维直方图
2018/02/08 Python
python实现日常记账本小程序
2018/03/10 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
学生自我鉴定模板
2013/12/30 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
2014年大学生社会实践自我鉴定
2014/09/26 职场文书
小学见习报告
2014/10/31 职场文书
员工辞职信怎么写
2015/02/27 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
Python列表删除重复元素与图像相似度判断及删除实例代码
2021/05/07 Python
浅谈 JavaScript 沙箱Sandbox
2021/11/02 Javascript
Window server中安装Redis的超详细教程
2021/11/17 Redis