您的位置:首页 > 编程语言 > Python开发

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。

一次浅拷贝会构造一个新的复合对象,然后将原始对象中的所有引用插入到新的复合对象中。

一次深拷贝也会构造一个新的复合对象,但会递归地将原始对象中的所有对象拷贝一份到新的复合对象中。

对于非复合变量, 赋值语句,深拷贝,浅拷贝都实现的是赋值语句功能。

例子

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 - 复合对象中对象也同样进行拷贝
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: