python的浅拷贝和深拷贝的区别
2012-11-11 21:46
323 查看
# -*- coding:utf-8 -*- import copy a = ['test', [[1,2],3]] b = a c = copy.copy(a) d = copy.deepcopy(a) print id(b), id(a), id(c), id(d) print [id(x) for x in a] print [id(x) for x in b] print [id(x) for x in c] print [id(x) for x in d] print [id(x) for x in a[1]] print [id(x) for x in c[1]] print [id(x) for x in d[1]]
输出
28776488 28776488 28791512 28791552
[28583936, 28763480]
[28583936, 28763480]
[28583936, 28763480]
[28583936, 28791632]
[28763400, 19783312]
[28763400, 19783312]
[28791592, 19783312]
首先得明白a对象里有什么,对象a是一个list,list中的每个元素都是一个指向某个对象的引用。
浅拷贝
c = copy.copy(a)的过程是,创建一个新的list对象c,将a中每个引用的值赋给对应的c中的引用,
所以c的两个引用的值与a中两个引用的值相同
深拷贝
d = copy.deepcopy(a)的过程是,创建一个新的list对象d,将a中每个引用的值赋给对应d中的引用,
在赋值之前,判断该引用所指向的对象是否为mutable对象,如果是,则创建一个该mutable对象的深拷贝,并将引用指向该对象,
如果不是,则直接将a中的引用赋给d。
简而言之,深拷贝与浅拷贝的区别在于当拷贝引用值时,是否需要拷贝引用值对应的对象
相关文章推荐
- python中copy模块 copy()浅拷贝和deepcopy()深拷贝的区别
- python 包和模块 等于号(==)和is的区别与联系 对象的拷贝(copy)
- python中文件的遍历、拷贝以及几个版本的小区别
- Python中深拷贝与浅拷贝的区别:
- Python 中赋值和分片拷贝的区别
- 图解python中赋值、浅拷贝、深拷贝的区别
- Python中复制,浅拷贝,深拷贝的区别详解
- Python 赋值、浅拷贝、深拷贝的区别?
- Python3 copy(深和浅拷贝的区别)
- Python中的赋值、浅拷贝、深拷贝的区别?
- python 对象拷贝, 值相同,同一对象的区别
- Python赋值、浅拷贝与深拷贝之间的区别
- Python里的拷贝【引用和copy(),deepcopy()的区别】
- Python 赋值、浅拷贝、深拷贝的区别?
- Python赋值语句与深拷贝、浅拷贝的区别
- python 赋值的时候是引用,如果需要复制则需要注意深拷贝和浅拷贝的区别
- python3中浅拷贝与深拷贝的实现方式、区别
- python编程之赋值和拷贝的区别概述及操作excel数据库(图)
- python深拷贝和浅拷贝的区别
- python 浅拷贝和深拷贝的区别