Python赋值语句与深拷贝、浅拷贝的区别
2015-12-11 20:10
260 查看
参考:http://stackoverflow.com/questions/17246693/what-exactly-is-the-difference-between-shallow-copy-deepcopy-and-normal-assignm
正常赋值语句会使左操作数简单地指向右操作数指向的对象。
深拷贝和浅拷贝之间的区别仅对复合变量起作用,复合变量指的是对象中又包含了对象,如list,class,dict。
一次浅拷贝会构造一个新的复合对象,然后将原始对象中的所有引用插入到新的复合对象中。
一次深拷贝也会构造一个新的复合对象,但会递归地将原始对象中的所有对象拷贝一份到新的复合对象中。
对于非复合变量, 赋值语句,深拷贝,浅拷贝都实现的是赋值语句功能。
例子:
如果使用正常赋值语句:
使用浅拷贝的话:
使用深拷贝的话:
正常赋值语句会使左操作数简单地指向右操作数指向的对象。
深拷贝和浅拷贝之间的区别仅对复合变量起作用,复合变量指的是对象中又包含了对象,如list,class,dict。
一次浅拷贝会构造一个新的复合对象,然后将原始对象中的所有引用插入到新的复合对象中。
一次深拷贝也会构造一个新的复合对象,但会递归地将原始对象中的所有对象拷贝一份到新的复合对象中。
对于非复合变量, 赋值语句,深拷贝,浅拷贝都实现的是赋值语句功能。
例子:
import copy a = [1, 2, 3] d = [4, 5, 6] c = [a, b]
如果使用正常赋值语句:
d = c print id(c) == id(d) # True - d和c指向同一个对象 print id(c[0]) == id(d[0]) # True - d[0]和c[0]当然也是同一对象
使用浅拷贝的话:
d = copy.copy(c) print id(c) == id(d) # False - d是一个新对象,浅拷贝会构造一个新的复合对象 print id(c[0]) == id(d[0]) # True - 但复合对象中的对象不会复制,和原来的指向一样
使用深拷贝的话:
d = copy.deepcopy(c) print id(c) == id(d) # False - d同一是个全新的复合对象 print id(c[0]) == id(d[0]) # False - 复合对象中对象也同样进行拷贝
相关文章推荐
- Python: 消除print的自动换行
- python练习
- python 基本数据类型
- Python调用DLL
- python练习
- python strip()函数
- Robot自定义python关键字库通过ice中间件调用服务进行API测试
- 零基础入门学习Python(7):元组
- python安装以及配置Numpy和Scipy模块
- python学习---列表
- 第二个UI脚本--Python+selenium之unittest+HTMLtestRunner及python的继承
- 深入源码解析Python中的对象与类型
- python对象类型
- python 写三级菜单
- python 读取文件指定某行
- Python中web.py运行后窗口显示中文
- Python多线程学习
- [Python]ctypes+struct实现类c的结构化数据串行处理
- Python模板库Mako的用法
- Python函数练习:冒泡算法+快速排序(二分法)