Python浅拷贝
2017-08-27 22:49
253 查看
浅拷贝
运行结果为:
分析代码:
首先,依然使用一个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/
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]
运行结果为:
分析代码:
首先,依然使用一个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/
相关文章推荐
- 0318python list 深拷贝 和浅拷贝
- Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
- python生成器→杨辉三角→深浅拷贝
- python的深拷贝deepcopy与浅拷贝copy
- PYTHON实现将一个文件夹下的名字满足条件的图片拷贝复制到另一个文件夹路径
- python list中的‘=’、深拷贝和浅拷贝问题
- python知识点:浅拷贝和深拷贝
- 流畅的python--深拷贝,浅拷贝
- python语法31[引用和拷贝]
- 浅谈Python中对象拷贝
- python 引用与拷贝
- Python学习笔记【引用VS拷贝】
- Python中的浅拷贝与深拷贝
- Python语言中的引用和拷贝
- 2.python里如何拷贝一个对象
- python 对象拷贝, 值相同,同一对象的区别
- python-深拷贝与浅拷贝
- file()拷贝文件 分类: python 2012-12-24 16:44 138人阅读 评论(0) 收藏
- python 中的深拷贝和浅拷贝
- python的拷贝(深拷贝和浅拷贝)