Python随记(四)列表复制 之 直接赋值 浅拷贝 和 深度拷贝的分析
2018-01-24 01:29
615 查看
Python随记(四)列表复制 之 直接赋值 浅拷贝 和 深度拷贝的分析
我的平台:Uabantu16.04+python3.6
1.三者简述
a. 直接赋值: 用等号 = ,其实就是对象的引用b.浅拷贝: 用copy( ),拷贝父对象,但是不会拷贝内部子对象
c.深度拷贝: 用deepcopy,是采用的模块copy中的deepcopy方法,完全拷贝父对象和子对象
2.程序举例
现创建一个列表a,列表里的子对象也是列表,并进行赋值,浅拷贝,和 深度拷贝操作:如图所示,
b是赋值所得,
c是浅拷贝所得,
d是深度拷贝所得,注意在使用深度拷贝之前,先要调用copy模块: import copy
此时可以看到四者的值一样
2.1直接赋值和拷贝(浅或深)之间的区别
在列表a后面添加一个新的元素【0,0,0】:可以看到,我只改变了列表a,但是b也跟着变化了,c 和 d却没有变化
说明:赋值操作其实不是真的拷贝,它只是令变量b指向了a所指向的对象,他们两个其实共同指向一个对象,类似于C++中的引用!
改变其中一个,另一个会接着改变。
而拷贝操作,无论深浅,都是相当于新建了一个新的列表,这个列表c 和 d 与源列表 a其实是独立的,所以列表c和d并无变化!
2.2浅拷贝和深度拷贝的区别
现在对列表a的子对象进行操作!比如令其第一个列表增加一个数字9,如图:会发现,a变化是ok的,因为我们本身就在对a进行操作,b变化也是ok的,因为2.1说了它俩其实指向一个对象
但是c居然也变化了,这就是所谓浅拷贝 浅 在何处了,父对象和a指向的对象是独立的,而子对象,比如这个列表元素[1, 2, 3]其实和a里面的子对象还是指向同一个对象!
所以浅拷贝不能说是创建了一个完全独立的新的列表,而深度拷贝,可以看出,真的就是生成了一个完全不相关的新的列表d!不管a怎么变,d列表我自岿然不动
三者区别想必大家已经清楚了
相关文章推荐
- Python 直接赋值、浅拷贝和深度拷贝解析
- Python 直接赋值、浅拷贝和深度拷贝解析
- Python 直接赋值、浅拷贝和深度拷贝解析
- Python 直接赋值、浅拷贝和深度拷贝解析
- Python直接赋值、浅拷贝和深度拷贝解析
- 【Python】Python 直接赋值、浅拷贝和深度拷贝解析
- 对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
- python list(列表)赋值与复制
- python 赋值的时候是引用,如果需要复制则需要注意深拷贝和浅拷贝的区别
- python的直接赋值不会拷贝,只相当于变量的一个别名
- python切片的使用及复制列表和给列表赋值
- Python 直接赋值、浅拷贝和深拷贝
- python列表复制(浅拷贝and深拷贝)
- Python 赋值、浅拷贝和深度拷贝
- Python利用列表深度遍历目录、复制文件
- python笔记6 - 序列,列表(生成,常用方法,运算,切片赋值),深拷贝和浅拷贝,列表推导式
- 【Python系列2】赋值、深度复制与传参
- 排序算法—直接插入排序算法分析与实现(Python)
- Python中的赋值,浅拷贝和深拷贝的区别
- python——赋值与深浅拷贝