赋值、浅拷贝、和深拷贝的区别

匿名 (未验证) 提交于 2019-12-03 00:39:02

一、赋值

二、浅拷贝(shallowcopy)

浅拷贝会创建新的对象,其内容非原对象本身的引用,而是原对象内第一层对象的引用,

浅拷贝有三种形式:

切片操作:b = a[:]或者b = [x for x in a];

工厂函数:b = list(a);

copy函数:b = copy.copy(a)

在这种情况下列表a 和列表b是不同的对象,修改b理论上不会影响到列表a,

但是要注意的是浅拷贝之所以只拷贝了一层,在列表a中有一个嵌套的list,如果我们修改了它,情况就不一样了,比如:a[3].append(“4”),查看列表b也发生了变化,这是因为我们修改了嵌套的list,修改外层元素,会修改它的引用,让他指向别的位置,修改嵌套列表中的元素,地址未发生变化,指向的都是用一个位置

三、深拷贝(deepcopy)

四、拷贝的注意点

对于非容器类型,如数字,字符,以及其他的’’原子’’类型,没有拷贝一说,产生的都是原对象的引用.

如果元组变量值包含原子类型的对象,即使采用了深拷贝,也只能得到浅拷贝.因为元组是不可变类型.


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!