对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检测lvs real server状态
Jan 22 Python
记录Django开发心得
Jul 16 Python
通过数据库向Django模型添加字段的示例
Jul 21 Python
python版简单工厂模式
Oct 16 Python
python调用xlsxwriter创建xlsx的方法
May 03 Python
Python数据结构之图的应用示例
May 11 Python
Python设计模式之建造者模式实例详解
Jan 17 Python
浅谈python中get pass用法
Mar 19 Python
Python3实现将一维数组按标准长度分隔为二维数组
Nov 29 Python
Python如何使用paramiko模块连接linux
Mar 18 Python
Opencv+Python识别PCB板图片的步骤
Jan 07 Python
PyQt5结合QtDesigner实现文本框读写操作
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
PHP设计聊天室步步通
2006/10/09 PHP
PHP如何编写易读的代码
2007/07/10 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
php文件包含目录配置open_basedir的使用与性能详解
2017/04/03 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
JavaScript生成二维码图片小结
2015/12/27 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
2017/01/04 Javascript
js仿京东轮播效果 选项卡套选项卡使用
2017/01/12 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
ES6基础之解构赋值(destructuring assignment)
2019/02/21 Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
2019/04/29 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
python shell根据ip获取主机名代码示例
2017/11/25 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
Django 查询数据库并返回页面的例子
2019/08/12 Python
python+django+rest框架配置创建方法
2019/08/31 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
python scatter函数用法实例详解
2020/02/11 Python
python实现磁盘日志清理的示例
2020/11/05 Python
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
廉价连衣裙和婚纱礼服在线销售:Tbdress
2019/02/28 全球购物
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
荷兰家电销售网站:Welhof
2020/12/08 全球购物
经理秘书岗位职责
2013/11/14 职场文书
物业总经理岗位职责
2014/02/28 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
高二语文教学反思
2016/02/16 职场文书