对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中列表和数组的赋值,浅拷贝和深拷贝的实例讲解相关推荐

  1. python 空矩阵_在NumPy中创建空数组/矩阵的方法

    如何在NumPy中创建空数组/矩阵? 在添加行的情况下,你最好的选择是创建一个与数据集最终一样大的数组,然后向它添加数据 row-by-row: >>> import numpy & ...

  2. c++ 数组引用_在 Solidity中使用值数组以降低 gas 消耗

    背景 我们Datona Labs在开发和测试Solidity数据访问合约(S-DAC:Smart-Data-Access-Contract)模板过程中,经常需要使用只有很小数值的小数组(数组元素个数少 ...

  3. java数组图片_在JAVA中定义图片数组

    为实现此意图需要分三段来实现: 1. 初始化: Image[] img=new Image[n]; for(int i=0;i img[i]=Toolkit.getDefaultToolkit().c ...

  4. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  5. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  6. python转置矩阵函数_对python 矩阵转置transpose的实例讲解

    在读图片时,会用到这么的一段代码: image_vector_len = np.prod(image_size)#总元素大小,3*55*47 img = Image.open(path) arr_im ...

  7. vue 监听map数组变化_解决vue无法侦听数组及对象属性的变化问题

    一.数组 1.可以监听到的情况 如push.splice.=赋值(array=[1,2,3]) 2.无法监听到的情况 使用下标修改某个元素(这种比较常见) array[index] = 1 objec ...

  8. python 打印数组变量_使用Python将数组的元素导出到变量中(unpacking)

    下面就为大家分享一篇使用Python将数组的元素导出到变量中(unpacking),具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 最近工作中遇到一个问题,需要利用Python将数组(list ...

  9. python给矩阵赋值_解决Python二维数组赋值问题

    解决Python二维数组赋值问题 当我们采用s=[[0]*3]*2初始化一个数组,然后对s[0][0]进行赋值,改变的是第一列所有的值.因为用s = [[0]*3]*2 初始化数组,他表示的是指向这个 ...

最新文章

  1. 单例模式——创建型模式
  2. 浅谈Delphi过程与函数02 - 零基础入门学习Delphi21
  3. C语言指针:定义,使用及计算指针大小
  4. ITK:用常量填充图像
  5. python批量上传 服务器_Python Tornado批量上传图片并显示功能
  6. 如何在Java JVM中处理图像和视频
  7. esxi root 密码规则_陌陌风控系统静态规则引擎aswan
  8. 好记性不如烂笔头——.NET运行原理
  9. [论文阅读] Variational Adversarial Active Learning
  10. 服务器向客户端发送数据自动中断
  11. 保活 进程唤醒_Android 8.0以上系统应用如何保活
  12. 苹果cms怎么添加友情链接图文教程
  13. 计算机时代前的发明,假如1万人回到150万年前,只带简单工具,多久才能制造出计算机?...
  14. Java Emitter Template
  15. Docker使用docker-compose配合Makefile部署Nginx 挂载文件目录 实现视频图片html等静态资源的代理
  16. java 安全包_信息加密系统设计(依托Java平台安全包)
  17. 计算机的主要配件是哪两个,组成计算机cpu的两大部件是什么
  18. 光谱预处理方法综述及分析策略选择
  19. SELECT连表查询重复字段
  20. JS之setInterval方法

热门文章

  1. Wallpaper壁纸提取得到tex文件,tex文件转图像,tex文件转png,tex文件提取壁纸,Wallpaper壁纸提取无法得到图像文件,RePKG-GUI提取得到tex文件而不是图像的解决方法
  2. 舞伴问题 队列 数据结构
  3. linux上删除文件过慢,Linux上删除大量文件几种方式对比
  4. 第一次面试——ThoughtWorks
  5. c1000k 高性能服务器构建技术,C1000K高性能服务器构建技术.ppt
  6. 易语言转换html编码,易语言html转实体源码
  7. xmind8 破解激活方法
  8. 逻辑回归(Logistic Regression, LR)简介
  9. 对某一程序取消用户账户控制
  10. 世隆科普:无人船的组成部分,无人船由那几部分组成