时间:2021-05-23
对于列表、元组和字典而言,进行赋值(=)、浅拷贝(copy)、深拷贝(deepcopy)而言,其内存地址是变化不通的。
赋值只是创建一个变量,该变量指向原来的内存地址
>>> name1 = ['a','b',['m','n'],'c']>>> name2 = name1#输出结果,两个内存地址是一样的>>> print(id(name1),',',id(name2))50077256 , 50077256如图所示:
浅拷贝是指在内存地址中,只拷贝出第一层的内存的地址,所以拷贝变量和被拷贝变量的内存地址是不一样的(列表、元组和字典中的copy()方法都是浅拷贝)
>>> import copy>>> name1 = ['a','b',['m','n'],'c']#浅copy>>> name2 = copy.copy(name1)>>> print(name1,',',id(name1))['a', 'b', ['m', 'n'], 'c'] , 50228296>>> print(name2,',',id(name2))['a', 'b', ['m', 'n'], 'c'] , 50920008#修改列表中的元素>>> name1[0] = 'h'>>> name1[2][0] = 'M'>>> print(name1,',',id(name1))['h', 'b', ['M', 'n'], 'c'] , 50228296>>> print(name2,',',id(name2))['a', 'b', ['M', 'n'], 'c'] , 50920008如图所示:
注:因为浅拷贝只拷贝了第一层,所以拷贝的变量和被拷贝的变量的第二层的列表的内存地址是一样的。
>>> import copy>>> name1 = ['a','b',['m','n'],'c']>>> name2 = copy.copy(name1)>>> name1[0] = 'h'>>> name1[2][0] = 'M'#name1[2][0]的内存地址和name2[2][0]内存地址是一样的>>> print(name1,id(name1),id(name1[2][0]))['h', 'b', ['M', 'n'], 'c'] 50209800 13820904>>> print(name2,id(name2),id(name2[2][0]))['a', 'b', ['M', 'n'], 'c'] 50891144 138209041.用copy模块中的copy方法(跟上面的一样)
2.用切片的方式:
>>> name1 = ['a','b',['m','n'],'c']>>> name2 = name1[:]3.用列表自带的方法:
>>> name1 = ['a','b',['m','n'],'c']>>> name2 = name1.copy()深拷贝是指在内存中将所有的数据重新创建一份。
注:排除最后一层,即python内部对字符串和数字的优化
>>> import copy>>> name1 = ['a','b',['m','n'],'c']#深拷贝>>> name2 = copy.deepcopy(name1)>>> print(name1,',',id(name1))['a', 'b', ['m', 'n'], 'c'] , 50142472>>> print(name2,',',id(name2))['a', 'b', ['m', 'n'], 'c'] , 50942280>>> name1[0] = 'h'>>> name1[2][0] = 'M'>>> print(name1,id(name1),id(name1[2][0]))['h', 'b', ['M', 'n'], 'c'] 50142472 10937320>>> print(name2,id(name2),id(name2[2][0]))['a', 'b', ['m', 'n'], 'c'] 50942280 4896280如图所示:
注:因为深拷贝会拷贝到最后一层的内存地址,所以最后一层的内存地址是不通
方法1、
for key in info: print(key,info[key])方法2、
for k,v in info.items(): #会先把dict转成list,数据量大时莫用 print(k,v)小结:
①方法1的效率比方法2的效率高很多
②方法1是直接通过key取value
③方法2是先把字典转换成一个列表,再去取值
④当数据量比较大的时候,用第二种方法时,字典转换成列表的这个过程需要花大量的时间老转换,当然数据量不大,没有关系,效率差不多
更多关于Python字典深浅拷贝与循环方式方法请查看下面的相关链接
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Python中字典的浅拷贝与深拷贝用法。分享给大家供大家参考,具体如下:最近发现的一个很值得记录的东西就是python字典的浅拷贝问题首先,明确一
要说清楚Python中的深浅拷贝,需要搞清楚下面一系列概念:变量-引用-对象(可变对象,不可变对象)-切片-拷贝(浅拷贝,深拷贝)【变量-对象-引用】在Pyth
本文主要研究的是Python对内存的使用(深浅拷贝)的相关问题,具体介绍如下。浅拷贝就是对引用的拷贝(只拷贝父对象)深拷贝就是对对象的资源的拷贝>>>a=[1,
深浅拷贝在Python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,Python并没有拷贝这个对象,而只是拷贝了这个对象的引用,
java深拷贝与浅拷贝机制详解概要:在Java中,拷贝分为深拷贝和浅拷贝两种。java在公共超类Object中实现了一种叫做clone的方法,这种方法clone