对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
引用: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中列表和数组的赋值,浅拷贝和深拷贝的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解的更多相关文章
- Python中列表操作函数append的浅拷贝问题
L=int(input())#L位数N=int(input())#N进制row=[]list1=[]for i in range(1,N): row.append(1)list1.append(row ...
- 谈谈Python中列表、元组和数组的区别和骚操作
一.列表(List) 1.列表的特点 列表是以方括号“[]”包围的数据集合,不同成员以“,”分隔.如 L = [1,2,3], 列表a有3个成员. 列表是可变的数据类型[可进行增删改查],列表中可以包 ...
- Python中列表,元组,字典,集合的区别
参考文档https://blog.csdn.net/Yeoman92/article/details/56289287 理解Python中列表,元组,字典,集合的区别 列表,元组,字典,集合的区别是p ...
- python中列表和元组以及字符串的操作
python中列表是非常好用的.不过有一些使用小细节还需要注意一下. tag[32:-4] 从index为32到tag的倒数第4个字符. 如果索引为32的值在倒数第4个字符的右边,那么将输出为空.只要 ...
- python中列表元素连接方法join用法实例
python中列表元素连接方法join用法实例 这篇文章主要介绍了python中列表元素连接方法join用法,实例分析了Python中join方法的使用技巧,非常具有实用价值,分享给大家供大家参考. ...
- Python中列表的使用
python中的列表与java中的数组非常类似,但使用方法比java中数组简单很多,python中的数据类型不需要显示声明,但在使用时必须赋值,列表元素下标从0开始 初始化列表(初始化一个包含五个元素 ...
- Python中的深浅拷贝,赋值及引用
简单来说,若对象a中存的是列表或字典等可变对象,b对a的浅拷贝只是对对象第一层的复制,修改b第二层的元素仍然会影响两个对象. 深拷贝则是不会影响原来的对象. import copy.copy() 浅拷 ...
- python中列表 元组 字典 集合的区别
列表 元组 字典 集合的区别是python面试中最常见的一个问题.这个问题虽然很基础,但确实能反映出面试者的基础水平. (1)列表 什么是列表呢?我觉得列表就是我们日常生活中经常见到的清单.比如,统计 ...
- Python中List的append引用赋值问题处理
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...
随机推荐
- JAVA常量池、栈、堆的比较(转载)
今天在学JAVA的数据存储位置的时候,看到了一篇博文感觉不错,特此转载: http://www.cnblogs.com/Eason-S/p/5658230.html JAVA中,有六个不同的地方可以存 ...
- C 语言实例 -求分数数列1/2+2/3+3/5+5/8+...的前n项和
程序分析:抓住分子与分母的变化规律:分子a:1,2,3,5,8,13,21,34,55,89,144...分母b:2,3,5,8,13,21,34,55,89,144,233...分母b把数赋给了分子 ...
- pip 换源
pip 换源 pip国内的一些镜像 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.ed ...
- 洛谷 P1464 Function(简单记忆化)
嗯... 让一切从水开始吧... 水过初赛,但愿复赛能够接着水过... 这道题不记忆化会tle,所以用空间换时间,将每次的答案(只有20*20*20个)存下来,如果之前已经求过,就不需要重复求了... ...
- “systemd”命令管理各类服务
一.centos7.red hat7 取消了运行级别的概念,用systemd代替了init中的运行级别概念. 二.用"ln"命令把"多用户,无图形"目标文件链接 ...
- Centos7 将应用添加快捷方式到applications 中以pycham为例[ubuntu]适用
安装版本pycharm-2019.1.3 安装路径:/opt/pycharm-2019.1.3/ vim /usr/share/applications/pycharm.desktop #!/usr/ ...
- 下载完idea后需要做的设置
1.设置字体 2.安装插件 3.设置文件头(C:\Users\用户名\.IntelliJIdea2019.2\config\fileTemplates\includes下有个文件叫做File Head ...
- 九、Appium-python-UI自动化之通过text定位
1.通过xpath定位text xpath路径为://android.widget.EditText[@text='请输入包含街道的完整地址'] 2.通过AndroidUIAutomator # 这个 ...
- pom.xml文件中properties有什么用
properties标签的作用: 在标签内可以把版本号作为变量进行声明,后面dependency中用到版本号时可以用${变量名}的形式代替,这样做的好处是:当版本号发生改变时,只有更新properti ...
- 解决chrome记住账号默认样式覆盖
当谷歌游览器记住账号后,输入框的颜色会变为黄色,最直接的方法:加入以下代码 input:-webkit-autofill , textarea:-webkit-autofill, select:-we ...