引用:https://www.jb51.net/article/142775.htm

列表赋值:

1
2
3
4
5
6
7
>>> 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不改变,可以用到切片

1
2
3
4
>>> b = a[:]
>>> a[0] = 0
>>> print b
[1, 2, 3]

解释,切片a[:]会产生一个新的对象,占用一块新的内存,b指向这个新的内存区域,因此改变a所指向的对象的值,不会影响b

列表深拷贝和浅拷贝

浅拷贝

1
2
3
4
5
6
7
8
>>> 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']]

深拷贝

1
2
3
4
5
>>> 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

数组赋值不能用切片来达到相同的目的

1
2
3
4
5
6
>>> 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仍然指向同一块内存。

此时,只能用拷贝

1
2
3
4
>>> 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中列表和数组的赋值,浅拷贝和深拷贝的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

转载于:https://www.cnblogs.com/Sweepingmonk/p/11599297.html

对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解相关推荐

  1. python数组赋值_对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解

    对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解 列表赋值: >>> a = [1, 2, 3] >>> b = a >>> print ...

  2. python中is、id、==与浅拷贝和深拷贝

    python中的3个常见操作符is.id.==,三个的使用方法和应用场景不近相同,有各自适合的应用场景 is:用于比较两个对应是否是同一个引用 ==:用于比较两个之是否相同 id:用于获取对象的内存地 ...

  3. 概念一: python 中列表 ,数组, 集合,字典;

    1. python 基本数据类型 首先python3 中 自带的 有 六个标准的数据类型: Number(数字) String(字符串) Tuple(元组) List(列表) Set(集合) Dict ...

  4. python中readlines函数例子_Python遍历方法readline()和readlines()实例讲解

    在进行Python项目开发(http://www.maiziedu.com/course/python/)中我们需要遍历一个大日志文件,在这个时候我们应该使用readlines()还是readline ...

  5. python赋值浅拷贝和深拷贝的区别_python赋值、浅拷贝、深拷贝区别

    在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出现一些问题.所以,在这里按个人的理解谈谈它们之间的区别. 一.赋值(assignment) 在<Py ...

  6. python pop() ,如何在Python的列表或数组中移除元素

    python pop() ,如何在Python的列表或数组中移除元素 在本文中,你将学习如何使用Python内置的 pop() 方法,最后,你将知道如何使用 pop() 从 Python 中的列表中删 ...

  7. 四、Python第四课——Python中列表及其操作(增删改查)

    目录 一.Python中的列表 1.列表的定义和赋值 2.列表的使用 二.列表的"增删改查" 1.列表中元素的增加 A.在列表尾添加元素 B.在列表中插入元素 2.列表中" ...

  8. Python中列表和字符串的反转

    要求: 原列表:[13, 30, 42, 85, 9, 45] 反转后的列表:[45, 9, 85, 42, 30, 13] 原字符串:hello 反转后的字符串:olleh Python现成的反转功 ...

  9. 手写Python中列表和字符串的反转

    要求: 原列表:[13, 30, 42, 85, 9, 45] 反转后的列表:[45, 9, 85, 42, 30, 13] 原字符串:hello 反转后的字符串:olleh Python现成的反转功 ...

  10. python中列表的sort方法_python中列表的sort方法使用详解

    内容简介:python中列表的sort方法使用详解 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的. 排序,数字.字符 ...

最新文章

  1. 列举web开发中,为满足高性能的架构技术实现
  2. 「模型解读」GoogLeNet中的inception结构,你看懂了吗
  3. python的head函数_python – 是否有一个pandas函数来显示第一个/最后一个n列,如.head().tail()?...
  4. python超神之路:Python3 列表list合并的4种方法
  5. Java 基础数据结构介绍
  6. 静态反编译工具IDA Pro 7 for Mac
  7. 适合程序员的简历模板
  8. java放大镜_Java写的屏幕放大镜
  9. 【精选】抽奖点名、随机抽奖PPT素材合集,年会、老师必备
  10. 小米2S稳定版 教你如何一键ROOT
  11. h30-t10 android phone,荣耀3C移动2G版(H30-T10)官方完整版ROM全合集!!!
  12. android item弹出popupwindow recycleview_PopupWindow+RecyclerView实现上下滑动框功能
  13. QT 输入框禁止window10触摸屏弹出键盘
  14. 微信小程序简介账号注册流程(简)
  15. 灵境元宇宙 ---论元宇宙之本真
  16. 修改php-fpm监听端口,php-fpm配置详解
  17. Java实验作业13(星座测试系统)
  18. Python-修改密码功能
  19. AcWing 188. 武士风度的牛 BFS 水题
  20. 优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试

热门文章

  1. 杭电 hdu 2002
  2. windows server 2003 IIS 调试 ASP时路径问题
  3. CAD建模软件:BricsCAD 22 for Mac
  4. mac如何删除用户或者群组
  5. 如何使用Mac DVDRipper Pro在mac上备份包括菜单和附加功能在内的完整的DVD
  6. MacOS上的一些隐藏的快捷小技巧
  7. 关于vue脚手架cli3.0版本的一篇有关配置的文章,可以借鉴
  8. 微软打造Unity开发工具包 为视力低落的用户增加辅助功能
  9. Linux运维 第三阶段 (九)NFS
  10. 仿微信添加触摸图片阴影效果