对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 14 Python
用matplotlib画等高线图详解
Dec 14 Python
python微信公众号之关注公众号自动回复
Oct 25 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
Nov 20 Python
pandas去重复行并分类汇总的实现方法
Jan 29 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
pycharm软件实现设置自动保存操作
Jun 08 Python
python Xpath语法的使用
Nov 26 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
Jan 12 Python
聊聊基于pytorch实现Resnet对本地数据集的训练问题
Mar 25 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
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
php中隐形字符65279(utf-8的BOM头)问题
2014/08/16 PHP
PHP中Closure类的使用方法及详解
2015/10/09 PHP
PHP命名空间namespace的定义方法详解
2017/03/29 PHP
php-app开发接口加密详解
2018/04/18 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
Javascript简单实现可拖动的div
2013/10/22 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
javascript模块化简单解析
2016/04/07 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
2016/04/17 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
jQuery Ajax全解析
2017/02/13 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
2017/08/22 Javascript
JavaScript原型对象原理与应用分析
2018/12/27 Javascript
[11:42]2018DOTA2国际邀请赛寻真——OG卷土重来
2018/08/17 DOTA
Python中利用原始套接字进行网络编程的示例
2015/05/04 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
全网首秀之Pycharm十大实用技巧(推荐)
2020/04/27 Python
通过代码实例了解Python异常本质
2020/09/16 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
打印机墨盒:123Inkjets
2017/02/16 全球购物
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
信息系统专业个人求职信范文
2013/12/07 职场文书
物业工作计划书
2014/01/10 职场文书
淘宝客服自我总结鉴定
2014/01/25 职场文书
售后求职信范文
2014/03/15 职场文书
秘书英文求职信
2014/04/16 职场文书
公司运动会策划方案
2014/05/25 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
迟到检讨书范文
2015/01/27 职场文书
自我推荐信怎么写
2015/03/24 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
Java Redisson多策略注解限流
2022/09/23 Java/Android