对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查看FTP是否能连接成功的方法
Jul 30 Python
详解Python中类的定义与使用
Apr 11 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
Feb 02 Python
浅谈python配置与使用OpenCV踩的一些坑
Apr 02 Python
django表单实现下拉框的示例讲解
May 29 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
python文字转语音的实例代码分析
Nov 12 Python
python模拟点击网页按钮实现方法
Feb 25 Python
python3用urllib抓取贴吧邮箱和QQ实例
Mar 10 Python
python中加背景音乐如何操作
Jul 19 Python
opencv用VS2013调试时用Image Watch插件查看图片
Jul 26 Python
Python实现视频中添加音频工具详解
Dec 06 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
正则表达式语法
2006/10/09 Javascript
一个基于PDO的数据库操作类
2011/03/24 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
2015/04/27 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
php服务器的系统详解
2019/10/12 PHP
js检测判断日期大于多少天的方法
2015/05/04 Javascript
JavaScript实现定时隐藏与显示图片的方法
2015/08/06 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
Nodejs中使用phantom将html转为pdf或图片格式的方法
2017/09/18 NodeJs
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
python写的一个文本编辑器
2014/01/23 Python
整理Python最基本的操作字典的方法
2015/04/24 Python
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
Python开发的实用计算器完整实例
2017/05/10 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
python多线程实现TCP服务端
2019/09/03 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
python openCV自制绘画板
2020/10/27 Python
医学类个人求职信范文
2014/02/05 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
神农溪导游词
2015/02/11 职场文书
公路施工安全责任书
2015/05/08 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
使用Java去实现超市会员管理系统
2022/03/18 Java/Android