详解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深入学习之上下文管理器
Aug 31 Python
Python语言实现获取主机名根据端口杀死进程
Mar 31 Python
Python 基于Twisted框架的文件夹网络传输源码
Aug 28 Python
Python中 Lambda表达式全面解析
Nov 28 Python
Python 操作文件的基本方法总结
Aug 10 Python
K-近邻算法的python实现代码分享
Dec 09 Python
http请求 request失败自动重新尝试代码示例
Jan 25 Python
python中的json总结
Oct 11 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
python3 简单实现组合设计模式
Jul 02 Python
python爬虫使用requests发送post请求示例详解
Aug 05 Python
基于Python实现对比Exce的工具
Apr 07 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
Banner程序
2006/10/09 PHP
PHP中的string类型使用说明
2010/07/27 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
2014/07/01 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
Yii框架安装简明教程
2020/05/15 PHP
编写简单的jQuery提示插件
2014/12/21 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
Node.js成为Web应用开发最佳选择的原因
2018/02/05 Javascript
使用异步组件优化Vue应用程序的性能
2019/04/28 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
python实现关键词提取的示例讲解
2018/04/28 Python
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
canvas探照灯效果的示例代码
2018/11/30 HTML / CSS
PHP中如何创建和修改数组
2012/05/02 面试题
UML设计模式笔试题
2014/06/07 面试题
园林资料员岗位职责
2013/12/30 职场文书
简单英文演讲稿
2014/01/01 职场文书
校园安全检查制度
2014/02/03 职场文书
秋季运动会广播稿
2014/02/22 职场文书
负责人任命书范本
2014/06/04 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
委托培训协议书
2014/11/17 职场文书
团员年度个人总结
2015/02/26 职场文书
2015年社区民政工作总结
2015/04/21 职场文书
幼儿园小班教师随笔
2015/08/14 职场文书
python正则表达式re.search()的基本使用教程
2021/05/21 Python
CSS3实现360度循环旋转功能
2022/02/12 HTML / CSS
「我的青春恋爱物语果然有问题。-妄言录-」第20卷封面公开
2022/03/21 日漫
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python
Python中np.random.randint()参数详解及用法实例
2022/09/23 Python