赋值运算与深浅copy
1、复制运算
l1 = [1,2,3,['a','b']]
l2 = l1
l1[0] = 111
print(l1) # [111, 2, 3, ['a', 'b']]
print(l2) # [111, 2, 3, ['a', 'b']] l1[3][0] = 'hello'
print(l1) # [111, 2, 3, ['hello', 'b']]
print(l2) # [111, 2, 3, ['hello', 'b']]
#所以,对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的
2、拷贝 copy
l1 = [1,2,3]
l2 = l1.copy() # copy,在内存中产生了新的地址
print(l1,l2) # [1, 2, 3] [1, 2, 3]
print(id(l1),id(l2)) # 2137678556040 2137678553608
l2.append('a')
print(l1,l2) # [1, 2, 3] [1, 2, 3, 'a'] l3 = [1,2,[4,5,6],3]
l4 = l3.copy()
print(l3,id(l3)) # [1, 2, [4, 5, 6], 3] 2535910547976
print(l4,id(l4)) # [1, 2, [4, 5, 6], 3] 2535910565192
l3.append('a')
print(l3,l4) # [1, 2, [4, 5, 6], 3, 'a'] [1, 2, [4, 5, 6], 3]
l3[2].append('a')
print(l3,l4) # [1, 2, [4, 5, 6, 'a'], 3] [1, 2, [4, 5, 6, 'a'], 3]
print(id(l3[2]),id(l4[2])) # 2535910550408 2535910550408
# 对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,
# 指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。
3、深拷贝 deepcopy
import copy
l1 = [1,2,[4,5,6],3]
l2 = copy.deepcopy(l1)
print(l1,id(l1)) # [1, 2, [4, 5, 6], 3] 2773191650376
print(l2,id(l2)) # [1, 2, [4, 5, 6], 3] 2773191650888
l1[2].append('a')
print(l1,l2) # [1, 2, [4, 5, 6, 'a'], 3] [1, 2, [4, 5, 6], 3]
# 对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。
赋值运算与深浅copy的更多相关文章
- Python 第三篇(下):collections系列、集合(set)、单双队列、深浅copy、内置函数
一.collections系列: collections其实是python的标准库,也就是python的一个内置模块,因此使用之前导入一下collections模块即可,collections在py ...
- Python 集合 深浅copy
一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
- 基础数据类型的补充和深浅copy
一:关于str 的操作方法补充 1,s.isspace() 判断字符串是否只由空格组成,是,为True,否则,为False. s = ' ' #只能是以至少一个空格组成的字符串(全空格) prin ...
- python集合深浅copy
一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
- Python基础数据类型之集合以及其他和深浅copy
一.基础数据类型汇总补充 list 在循环一个列表时,最好不要删除列表中的元素,这样会使索引发生改变,从而报错(可以从后向前循环删除,这样不会改变未删元素的索引). 错误示范: lis = [,,, ...
- python之集合,深浅copy
一. 集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
- python之路day07-集合set的增删查、列表如何排重(效率最高的方法)、深浅copy
集合set 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...
- python之数据类型补充、集合、深浅copy
一.内容回顾 代码块: 一个函数,一个模块,一个类,一个文件,交互模式下,每一行就是一个代码块. is == id id()查询对象的内存地址 == 比较的是两边的数值. is 比较的是两边的内存地址 ...
- day 07 数据类型,集合,深浅copy
1.day 06 内容回顾 小数据池 int :-5-256 str:特殊字符 ,*20 ascii:8位 1字节 表示一个字符 unicode:32位 4个字节 , 表示一个字符 字节表示8位表示一 ...
随机推荐
- C# 订单号的生成
/** * 根据当前系统时间加随机序列来生成订单号 * @return 订单号 */ public static string Generat ...
- 第08章 ElasticSearch Java API
本章内容 使用客户端对象(client object)连接到本地或远程ElasticSearch集群. 逐条或批量索引文档. 更新文档内容. 使用各种ElasticSearch支持的查询方式. 处理E ...
- shell 编程 变量
转自:http://blog.csdn.net/qq504196282/article/details/52994249 shell之变量和引用 分类:SHELL编程基础 (470) (0) 举报 ...
- SVN错误:Attempted to lock an already-locked dir及不能提交.so文件
当使用svn提交代码时,如果中断提交,就会进入工作拷贝的锁定状态. 这是需要用svn cleanup上次关闭时的锁定 如果没有Tortises,则直接进入到上面的文件夹下的.svn目录,删除lock文 ...
- Tomcat之Web站点部署
上线代码有两种方式,第一种方式是直接将程序目录放在webapps目录下面,这种方式大家已经明白了,就不多说了.第二种方式是使用开发工具将程序打包成war包,然后上传到webapps目录下面.下面让我们 ...
- delphi实现窗体组建随窗体大小改变而改变
在网上查了许多资料去论述如何在dephi中去实现组件随窗口大小的变化而变化,然都不尽如人意.有人说用组件的align + anchors 这两个属性去控制,但是我用了之后,让我大惊失色.把anchor ...
- 优化体验之使用visual EDM之映射存储过程,datatype to Enum
stored produce,datatype to Enum,Colored Entity,Multiple Diagrams 一:EDM给我们提供的强大功能 1. 存储过程的映射 直接灌sql到d ...
- docker 进入容器
- ASP.NET Core入门(一)
大家好,很荣幸您点了开此篇文章,和我一起来学习ASP.NET Core,此篇文字为<ASP.NET Core入门>系列中的第一篇,本系列将以一个博客系统为例,从第一行代码,到系统发布上线( ...
- pageadmin建站软如何修改和设置iis站点应用程序池
很多用户第一次安装PageAdmin建站系统时候会出现这个错误,主要原因: 1.首选打开iis站点基本设置,可以看到当前站点对应的应用程序池,如下图: 可以看到当前站点用的程序池名为MyAppPool ...