对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算法之求n个节点不同二叉树个数
Oct 27 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
Oct 11 Python
python自动化unittest yaml使用过程解析
Feb 03 Python
浅谈Python3多线程之间的执行顺序问题
May 02 Python
Pycharm调试程序技巧小结
Aug 08 Python
Python3.8安装Pygame教程步骤详解
Aug 14 Python
浅谈Selenium 控制浏览器的常用方法
Dec 04 Python
python des,aes,rsa加解密的实现
Jan 16 Python
Django+Django-Celery+Celery的整合实战
Jan 20 Python
Python实战之疫苗研发情况可视化
May 18 Python
Python数据处理的三个实用技巧分享
Apr 01 Python
全网非常详细的pytest配置文件
Jul 15 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水印
2007/03/16 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
CI框架网页缓存简单用法分析
2018/12/26 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
2011/01/01 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
基于ajax实现文件上传并显示进度条
2015/08/03 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
Vue v2.5 调整和更新不完全问题
2017/10/24 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
2020/05/19 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
python操作redis的方法
2015/07/07 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
python Xpath语法的使用
2020/11/26 Python
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
毕业生教师求职信
2013/10/20 职场文书
行政管理毕业生自荐信
2014/02/24 职场文书
社区党员志愿服务活动方案
2014/08/18 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
党员民主生活会材料
2014/12/15 职场文书
幼儿园教师个人总结
2015/02/05 职场文书
Java Lambda表达式常用的函数式接口
2022/04/07 Java/Android