Python 深copy和浅copy

浅copy 所谓“浅拷贝”,是指建立一个新的对象,其内容是原对象中元素的引用。(拷贝组合对象,不拷贝子对象)我的理解,关键是根据子元素的指向地址是否同样来判断函数

注意:浅拷贝和深拷贝的不一样仅仅是对组合对象来讲,所谓的组合对象就是包含了其它对象的对象,如列表,类实例。而对于数字、字符串以及其它“原子”类型,没有拷贝一说,产生的都是原对象的引用。 常见的浅拷贝有:切片操做、工厂函数、对象的copy()方法、copy模块中的copy函数。 深copy 所谓“深拷贝”,是指建立一个新的对象,而后递归的拷贝原对象所包含的子对象。深拷贝出来的对象与原对象没有任何关联。 注意若是子元素是不可变对象时,深copy对象的子元素所对应的指向地址会和原对象子元素同样 可是相互独立的, 下面的这个例子中子元素是可变的对象对象

import copy a = [[1, 2],[5, 6], [8, 9]] b = copy.copy(a) # 浅拷贝获得b c = copy.deepcopy(a) # 深拷贝获得c 深拷贝只有一种方式:copy模块中的deepcopy函数。 import copy a = [1, 2, 3] b = copy.deepcopy(a) print(id(a), id(b)) 140601785065840 140601785066200 总结:递归

一、赋值:简单地拷贝对象的引用,两个对象的id相同。 二、浅拷贝:建立一个新的组合对象,这个新对象与原对象共享内存中的子对象。 三、深拷贝:建立一个新的组合对象,同时递归地拷贝全部子对象,新的组合对象与原对象没有任何关联。虽然实际上会共享不可变的子对象,但不影响它们的相互独立性。内存

浅拷贝和深拷贝的不一样仅仅是对组合对象来讲,所谓的组合对象就是包含了其它对象的对象,如列表,类实例。而对于数字、字符串以及其它“原子”类型,没有拷贝一说,产生的都是原对象的引用。字符串

相关文章
相关标签/搜索