Python浅拷贝

来源:互联网 发布:windows toolkit 2.5.3 编辑:程序博客网 时间:2024/06/05 18:23

浅拷贝

import copywill = ["Will", 28, ["Python", "C#", "JavaScript"]]wilber = copy.copy(will)print id(will)print willprint [id(ele) for ele in will]print id(wilber)print wilberprint [id(ele) for ele in wilber]will[0] = "Wilber"will[2].append("CSS")print id(will)print willprint [id(ele) for ele in will]print id(wilber)print wilberprint [id(ele) for ele in wilber]

运行结果为:
这里写图片描述

分析代码:

  • 首先,依然使用一个will变量,指向一个list类型的对象

  • 然后,通过copy模块里面的浅拷贝函数copy(),对will指向的对象进行浅拷贝,然后浅拷贝生成的新对象赋值给wilber变量

  • 浅拷贝会创建一个新的对象,这个例子中”wilber is not will”
    但是,对于对象中的元素,浅拷贝就只会使用原始元素的引用(内存地址),也就是说”wilber[i] is will[i]”

  • 当对will进行修改的时候
    由于list的第一个元素是不可变类型,所以will对应的list的第一个元素会使用一个新的对象39758496
    但是list的第三个元素是一个可不类型,修改操作不会产生新的对象,所以will的修改结果会相应的反应到wilber上

这里写图片描述

总结一下,当我们使用下面的操作的时候,会产生浅拷贝的效果:

使用切片[:]操作
使用工厂函数(如list/dir/set)
使用copy模块中的copy()函数

摘自:http://python.jobbole.com/82294/

原创粉丝点击