python数组赋值_对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
对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中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
本文地址: http://www.cppcns.com/jiaoben/python/231359.html
python数组赋值_对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解相关推荐
- python 空矩阵_在NumPy中创建空数组/矩阵的方法
如何在NumPy中创建空数组/矩阵? 在添加行的情况下,你最好的选择是创建一个与数据集最终一样大的数组,然后向它添加数据 row-by-row: >>> import numpy & ...
- c++ 数组引用_在 Solidity中使用值数组以降低 gas 消耗
背景 我们Datona Labs在开发和测试Solidity数据访问合约(S-DAC:Smart-Data-Access-Contract)模板过程中,经常需要使用只有很小数值的小数组(数组元素个数少 ...
- java数组图片_在JAVA中定义图片数组
为实现此意图需要分三段来实现: 1. 初始化: Image[] img=new Image[n]; for(int i=0;i img[i]=Toolkit.getDefaultToolkit().c ...
- python 概率分布模型_使用python的概率模型进行公司估值
python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...
- python 时间序列预测_使用Python进行动手时间序列预测
python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...
- python转置矩阵函数_对python 矩阵转置transpose的实例讲解
在读图片时,会用到这么的一段代码: image_vector_len = np.prod(image_size)#总元素大小,3*55*47 img = Image.open(path) arr_im ...
- vue 监听map数组变化_解决vue无法侦听数组及对象属性的变化问题
一.数组 1.可以监听到的情况 如push.splice.=赋值(array=[1,2,3]) 2.无法监听到的情况 使用下标修改某个元素(这种比较常见) array[index] = 1 objec ...
- python 打印数组变量_使用Python将数组的元素导出到变量中(unpacking)
下面就为大家分享一篇使用Python将数组的元素导出到变量中(unpacking),具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 最近工作中遇到一个问题,需要利用Python将数组(list ...
- python给矩阵赋值_解决Python二维数组赋值问题
解决Python二维数组赋值问题 当我们采用s=[[0]*3]*2初始化一个数组,然后对s[0][0]进行赋值,改变的是第一列所有的值.因为用s = [[0]*3]*2 初始化数组,他表示的是指向这个 ...
最新文章
- 单例模式——创建型模式
- 浅谈Delphi过程与函数02 - 零基础入门学习Delphi21
- C语言指针:定义,使用及计算指针大小
- ITK:用常量填充图像
- python批量上传 服务器_Python Tornado批量上传图片并显示功能
- 如何在Java JVM中处理图像和视频
- esxi root 密码规则_陌陌风控系统静态规则引擎aswan
- 好记性不如烂笔头——.NET运行原理
- [论文阅读] Variational Adversarial Active Learning
- 服务器向客户端发送数据自动中断
- 保活 进程唤醒_Android 8.0以上系统应用如何保活
- 苹果cms怎么添加友情链接图文教程
- 计算机时代前的发明,假如1万人回到150万年前,只带简单工具,多久才能制造出计算机?...
- Java Emitter Template
- Docker使用docker-compose配合Makefile部署Nginx 挂载文件目录 实现视频图片html等静态资源的代理
- java 安全包_信息加密系统设计(依托Java平台安全包)
- 计算机的主要配件是哪两个,组成计算机cpu的两大部件是什么
- 光谱预处理方法综述及分析策略选择
- SELECT连表查询重复字段
- JS之setInterval方法
热门文章
- Wallpaper壁纸提取得到tex文件,tex文件转图像,tex文件转png,tex文件提取壁纸,Wallpaper壁纸提取无法得到图像文件,RePKG-GUI提取得到tex文件而不是图像的解决方法
- 舞伴问题 队列 数据结构
- linux上删除文件过慢,Linux上删除大量文件几种方式对比
- 第一次面试——ThoughtWorks
- c1000k 高性能服务器构建技术,C1000K高性能服务器构建技术.ppt
- 易语言转换html编码,易语言html转实体源码
- xmind8 破解激活方法
- 逻辑回归(Logistic Regression, LR)简介
- 对某一程序取消用户账户控制
- 世隆科普:无人船的组成部分,无人船由那几部分组成