详解Python的三种拷贝方式


Posted in Python onFebruary 11, 2020

在练习列表的操作的时候我发现赋值之后的列表会随着被赋值的列表改变而改变,就像是C语言中用指向同一实际变量的指针进行操作一样。这是因为Python中有三种拷贝方式:浅拷贝、深拷贝和赋值拷贝

赋值拷贝就像是定义新指针并指向了同一内存区域,对任意一个列表名进行操作,其他的也会变化。

深拷贝的作用是完全拷贝一个列表A并赋值给另一列表B。以下是深度拷贝与列表操作的样例。记得在使用深拷贝的时候要引入copy包。

import copy
 
#对列表的增删改
numbers_Ori = ['one', 'two', 'three', 'four']
print('origin')
print(numbers_Ori)
 
#deepcopy()是copy包里的方法,作用是将一个列表完全复制一份,赋值给指定新列表
#若只是用numbers = numbers_Ori来赋值则两个变量名将指向同一内存区域,修改任意一个后另一个也会随之变动
 
#增
numbers_2 = copy.deepcopy(numbers_Ori)
numbers_2.append('five')
print('append//////////////////')
print(numbers_2)
 
numbers_3 = copy.deepcopy(numbers_Ori)
numbers_3.insert(2, 'two and_a_half')
print('insert////////////////////')
print(numbers_3)
 
#删
numbers_4 = copy.deepcopy(numbers_Ori)
del numbers_4[2]
print('del///////////////////////')
print(numbers_4)
 
numbers_5 = copy.deepcopy(numbers_Ori)
num=numbers_5.pop(3)
print('pop////////////////////////')
print(numbers_5)
print('picked ' + num + ' up')
 
numbers_6 = copy.deepcopy(numbers_Ori)
numbers_6.remove('one')
print('remove/////////////////////')
print(numbers_6)
 
#改
numbers_7 = copy.deepcopy(numbers_Ori)
numbers_7[0] = '1'
print('改/////////////////////////')
print(numbers_7)
 
#可尝试将每一个"copy.deepcopy(numbers_Ori)"换成单独的"numbers_Ori"尝试赋值拷贝
#或换成"numbers_Ori.copy()"尝试浅拷贝

浅拷贝对于一维列表而言和深拷贝一样,而对于多维列表,修改B的一维内容时A不会变化;而修改高维内容时A也会随之变化,我们分别尝试在一维、二维和三维部分添加字符串

numbers = ['one', 'two', 'three', 'four', 'five', ['six', 'seven', ['eight', 'nine']]]
numbers_1 = numbers.copy()
numbers_1.append('add')#在一维列表的末尾添加字符串
print(numbers_1)
print(numbers)
numbers = ['one', 'two', 'three', 'four', 'five', ['six', 'seven', ['eight', 'nine']]]
numbers_1 = numbers.copy()
numbers_1[-1].append('add')#在二维列表的末尾添加字符串
print(numbers_1)
print(numbers)
numbers = ['one', 'two', 'three', 'four', 'five', ['six', 'seven', ['eight', 'nine']]]
numbers_1 = numbers.copy()
numbers_1[-1][-1].append('add')#在三维列表的末尾添加字符串
print(numbers_1)
print(numbers)

其中,numbers_1[-1]的意思是指定了numbers_1的最后一个元素,即二维部分"['six', 'seven', ['eight', 'nine']]",参数-1可以替换,但其他元素不是列表而是字符串,字符串不能append(),所以会报错;同理[-1][-1]就是三维部分"['eight', 'nine']",因为它是二维部分的最后一个元素。添加在末尾是因为使用了append(),而不是-1的原因。

总而言之,就是append()等列表操作必须对针对列表,就算是多维列表也要找出其中的列表元素才行。读者可以自行替换这些部分来进行试验。

总结

以上所述是小编给大家介绍的详解Python的三种拷贝方式,希望对大家有所帮助!

Python 相关文章推荐
举例介绍Python中的25个隐藏特性
Mar 30 Python
python中defaultdict的用法详解
Jun 07 Python
Python django实现简单的邮件系统发送邮件功能
Jul 14 Python
Python实现PS图像调整颜色梯度效果示例
Jan 25 Python
python DataFrame 修改列的顺序实例
Apr 10 Python
python的格式化输出(format,%)实例详解
Jun 01 Python
python 基本数据类型占用内存空间大小的实例
Jun 12 Python
python机器学习之神经网络实现
Oct 13 Python
用Python画小女孩放风筝的示例
Nov 23 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
Feb 28 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
Apr 28 Python
使用Python开发冰球小游戏
Apr 30 Python
Python @property原理解析和用法实例
Feb 11 #Python
如何使用Python发送HTML格式的邮件
Feb 11 #Python
python模式 工厂模式原理及实例详解
Feb 11 #Python
Python3搭建http服务器的实现代码
Feb 11 #Python
tensorflow实现二维平面模拟三维数据教程
Feb 11 #Python
python线程join方法原理解析
Feb 11 #Python
使用Python求解带约束的最优化问题详解
Feb 11 #Python
You might like
?算你??的 PHP 程式大小
2006/12/06 PHP
PHP 事件机制(2)
2011/03/23 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
thinkphp的静态缓存用法分析
2014/11/29 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
js获取内联样式的方法
2015/01/27 Javascript
jquery解析json格式数据的方法(对象、字符串)
2015/11/24 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
从源码里了解vue中的nextTick的使用
2018/11/22 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
js实现盒子拖拽动画效果
2020/08/09 Javascript
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
python实现媒体播放器功能
2018/02/11 Python
解决Python安装时报缺少DLL问题【两种解决方法】
2019/07/15 Python
python内存动态分配过程详解
2019/07/15 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
python实现mean-shift聚类算法
2020/06/10 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
利用python绘制正态分布曲线
2021/01/04 Python
美国最大最全的亚洲购物网站:美国亚米网(Yamibuy)
2020/05/05 全球购物
秘书岗位职责
2013/11/18 职场文书
《草原》教学反思
2014/02/15 职场文书
主题实践活动总结
2014/05/08 职场文书
物资采购方案
2014/06/12 职场文书
民事授权委托书范文
2014/08/02 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书