python基础4之递归、lambda、深浅copy
内容概要: 一、递归 二、匿名函数 三、关于python中的深浅拷贝与赋值 <table style="height: 30px; width: 1132px; background-color: #afeeee; ; width: 1132px;" border="0"> |
语法:
示列:
<table style="height: 30px; width: 1132px; background-color: #afeeee; ; width: 1132px;" border="0">
<tr><td><span style="font-size: 16px;">三、关于python中的深浅拷贝与赋值</td>
</tr></table>
说明:
1.赋值:将一个变量的值赋给另一个变量(例如,name1=“WD” name2=name1,将name1的值赋给name2)
2.浅拷贝:copy模块中的copy方法
如:
3.深度拷贝:copy模块中的deepcopy方法
如:
4.查看变量使用的内存地址使用id的方法
如:
区别比较:
在python中不同的数据类型的赋值、深浅拷贝结果不通,为此需要区别对待,同时为了方便验证,我们在交互模式下测试,测试环境python3.5.2.
1.数字类型
结果分析:对于数字类型,无论是赋值还是深浅拷贝,赋值或拷贝以后内存地址都一样,修改拷贝前的值,会重新分配一个新的内存地址,并不影响拷贝后的值。
2.字符串
结果分析:字符串类型和数字类型结果一样,改变a的值,会重新分配内存地址,并不影响b的值
3.列表
结果分析:列表的赋值操作如果对于改变整个列表而言,结果和字符串、数字类型相同,但是如果修改列表中某个元素,在示列中修改了a列表中元素,导致了b列表也改变了。
结果分析:浅copy,只对外层内存地址做拷贝,拷贝之后的两个列表内存地址不同,两个变量的第二层内存地址相同,修改整个第二层对拷贝后的变量无影响,但修改第二层中的元素的值,会影响拷贝后的值,从内存地址上看就很清晰了。
结果分析:深copy,只对外层内存地址做拷贝,内层地址相同,但是不通的是改变内层中元素的值,并不影响拷贝后的变量,相当于两份独立的数据。
结果分析:从结果上看,list中的列表方法也是浅copy。
4.字典
结果分析:字典的赋值操作和列表一样,无论修改外层元素还是内层元素,
结果分析:字典的浅拷贝和列表一样,使用copy方法拷贝字典后,a,b字典外层内存地址不同,第二层内存地址相同,修改a字典中整个第二层变量不会影响b字典,修改a字典中第二层中的元素的时候,会影响b字典。
结果分析:字典的深copy和列表相同,相当于两份独立的数据。
结果分析:字典的copy方法也相当于浅copy。
总结:
1.对于数字、字符串这些“简单的”数据类型,赋值、深copy、浅copy都一样,并且随意修改其中一个变量,并不影响另一个变量的值。
2.对于列表、字典这些“复杂”的数据类型,赋值操作相当于给变量取了别名,修改变量里的内容,都会改变,修改整个变量则无影响;浅copy和copy方法结果相同,对外层进行拷贝,修改第一层的元素相互不会影响,当列表或者字典中嵌套了列表或字典,修改嵌套的列表或者字典(也可以叫做第二层中的元素)导致两个变量都会改变;深copy相当于复制两份互不影响的数据。
使用建议:
1.对于数字、字符串类型可以随心所遇,对于字典、列表如果想得到两份不同的数据,建议使用copy.deepcopy的方法。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!