详解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 ip正则式
May 07 Python
Python使用Scrapy保存控制台信息到文本解析
Dec 27 Python
python分治法求二维数组局部峰值方法
Apr 03 Python
Python输入二维数组方法
Apr 13 Python
python读取和保存图片5种方法对比
Sep 12 Python
python实现五子棋小程序
Jun 18 Python
Python 3.6打包成EXE可执行程序的实现
Oct 18 Python
python数据分析:关键字提取方式
Feb 24 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
Apr 11 Python
Python读取yaml文件的详细教程
Jul 21 Python
实例代码讲解Python 线程池
Aug 24 Python
实例讲解Python中sys.argv[]的用法
Jun 03 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 header 跳转
2013/06/17 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
php格式化时间戳
2016/12/17 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
JS的反射问题
2010/04/07 Javascript
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
让复选框只能选择一项的方法
2013/10/08 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
Node.js实现连接mysql数据库功能示例
2017/09/15 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
vue使用echarts图表的详细方法
2018/10/22 Javascript
python统计cpu利用率的方法
2015/06/02 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
Python3.5集合及其常见运算实例详解
2019/05/01 Python
python 求一个列表中所有元素的乘积实例
2019/06/11 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
Selenium之模拟登录铁路12306的示例代码
2020/07/31 Python
python缩进长度是否统一
2020/08/02 Python
Python wordcloud库安装方法总结
2020/12/31 Python
css3 transform 3d 使用css3创建动态3d立方体(html5实践)
2013/01/06 HTML / CSS
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
师范毕业生求职自荐信
2013/09/25 职场文书
2014年教师业务学习材料
2014/05/12 职场文书
2014年实验室工作总结
2014/12/03 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
民事申诉状范本
2015/05/20 职场文书
学校运动会简讯
2015/07/20 职场文书