深拷贝和浅拷贝的区别
编辑:谯胜平 分类:程序与算法 标签:深拷贝,浅拷贝 发布时间:2021-04-20 浏览次数:917次
区别:浅拷贝只是增加了一个指针指向已存在的内存地址,仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅复制出来的对象也会相应的改变。深拷贝是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存。
概述:
1、浅拷贝可以使用列表自带的copy()函数(如list.copy()),或者使用copy模块的copy()函数。深拷贝只能使用copy模块的deepcopy(),所以使用前要导入:from copy import deepcopy
2、如果拷贝的对象里的元素只有值,没有引用,那浅拷贝和深拷贝没有差别,都会将原有对象复制一份,产生一个新对象,对新对象里的值进行修改不会影响原有对象,新对象和原对象完全分离开。
3、如果拷贝的对象里的元素包含引用(像一个列表里储存着另一个列表,存的就是另一个列表的引用),那浅拷贝和深拷贝是不同的,浅拷贝虽然将原有对象复制一份,但是依然保存的是引用,所以对新对象里的引用里的值进行修改,依然会改变原对象里的列表的值,新对象和原对象完全分离开并没有完全分离开。而深拷贝则不同,它会将原对象里的引用也新创建一个,即新建一个列表,然后放的是新列表的引用,这样就可以将新对象和原对象完全分离开。
热门文章
文章标签
- web(1)
- 数据库索引(1)
- 栈(1)
- const(2)
- #define(1)
- 虚函数(1)
- 反转链表(2)
- 深拷贝(1)
- 浅拷贝(1)
- 快速排序(1)
- 线程(1)
- 线程模型(1)
- (41)
- LRU(1)
- C++11(1)
- 一致性哈希算法(1)
- CPU(1)
- malloc(1)
- 迭代器(1)
- linux下编译(1)
- 类模板(1)
- git(1)
- Linux(2)
- 学科评估(2)
- scanf(2)
- gets(1)
- getchar(1)
- 考研经验(1)
- printf(1)
- mysql(2)
- STL(2)
- 富文本编辑器(1)
- 闰月(1)
- vector(1)
- CA(3)
- HTTPS(1)
- 晴天的魔法乐园(1)
- 单例模式(1)
- 谷歌(1)
- unzip(1)
- gcc(1)
- ubuntu(1)
- getline()(1)
- 作息时间表(1)
友情链接