对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执行get提交的方法
Apr 29 Python
Python处理字符串之isspace()方法的使用
May 19 Python
详解Django框架中用context来解析模板的方法
Jul 20 Python
Python开发的实用计算器完整实例
May 10 Python
浅析python3字符串格式化format()函数的简单用法
Dec 07 Python
使用selenium模拟登录解决滑块验证问题的实现
May 10 Python
python爬虫之快速对js内容进行破解
Jul 09 Python
对pytorch中的梯度更新方法详解
Aug 20 Python
python文字转语音的实例代码分析
Nov 12 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
Feb 09 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
Feb 17 Python
python产生模拟数据faker库的使用详解
Nov 04 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
一个捕获函数输出的函数
2007/02/14 PHP
php笔记之:文章中图片处理的使用
2013/04/26 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
php实现httpclient类示例
2014/04/08 PHP
php的GD库imagettftext函数解决中文乱码问题
2015/01/24 PHP
PHP 实现文件压缩解压操作的方法
2019/06/14 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
利用jquery动画特效和css打造的侧边弹出垂直导航
2014/04/04 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
2018/07/02 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
vue-cli3+typescript初体验小结
2019/02/28 Javascript
vue设置一开始进入的页面教程
2019/10/28 Javascript
基于javascript实现日历功能原理及代码实例
2020/05/07 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
介绍Python的Django框架中的QuerySets
2015/04/20 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
Python时间和字符串转换操作实例分析
2019/03/16 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
Python调用Windows命令打印文件
2020/02/07 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
RetroStage德国:复古服装
2019/02/03 全球购物
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
政治表现评语
2014/05/04 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
答谢词范文
2015/01/05 职场文书
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python
MySQL深分页问题解决思路
2022/12/24 MySQL