看到关于一篇Python拷贝的文章,写的很清晰,转载一下python
Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差别的,若是使用的时候不注意,就可能产生意外的结果。
下面本文就经过简单的例子介绍一下这些概念之间的差异。app
直接看一段代码:函数
will = ["Will", 28, ["Python", "C#", "JavaScript"]] wilber = will print id(will) print will print [id(ele) for ele in will] print id(wilber) print wilber print [id(ele) for ele in wilber] will[0] = "Wilber" will[2].append("CSS") print id(will) print will print [id(ele) for ele in will] print id(wilber) print wilber print [id(ele) for ele in wilber]
代码的输出为:
code
下面来分析一下这段代码:对象
下面就来看看浅拷贝的结果:blog
import copy will = ["Will", 28, ["Python", "C#", "JavaScript"]] wilber = copy.copy(will) print id(will) print will print [id(ele) for ele in will] print id(wilber) print wilber print [id(ele) for ele in wilber] will[0] = "Wilber" will[2].append("CSS") print id(will) print will print [id(ele) for ele in will] print id(wilber) print wilber print [id(ele) for ele in wilber]
代码结果为:
分析一下这段代码:ip
总结一下,当咱们使用下面的操做的时候,会产生浅拷贝的效果:内存
最后来看看深拷贝:字符串
import copy will = ["Will", 28, ["Python", "C#", "JavaScript"]] wilber = copy.deepcopy(will) print id(will) print will print [id(ele) for ele in will] print id(wilber) print wilber print [id(ele) for ele in wilber] will[0] = "Wilber" will[2].append("CSS") print id(will) print will print [id(ele) for ele in will] print id(wilber) print wilber print [id(ele) for ele in wilber]
代码的结果为:
get
分析一下这段代码:
其实,对于拷贝有一些特殊状况:
本文介绍了对象的赋值和拷贝,以及它们之间的差别:
PS:做者:田小计划
出处:http://www.cnblogs.com/wilber2013/