详解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的内建模块collections的教程
Apr 28 Python
简介Django框架中可使用的各类缓存
Jul 23 Python
python在不同层级目录import模块的方法
Jan 31 Python
Python实现统计代码行的方法分析
Jul 12 Python
python查询mysql,返回json的实例
Mar 26 Python
简单实现python数独游戏
Mar 30 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 Python
pyqt5 实现工具栏文字图片同时显示
Jun 13 Python
python opencv 图像拼接的实现方法
Jun 27 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
Oct 28 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
Feb 20 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
May 25 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使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
php操作csv文件代码实例汇总
2014/09/22 PHP
javascript 写类方式之五
2009/07/05 Javascript
js 代码集(学习js的朋友可以看下)
2009/07/22 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
Python 闭包的使用方法
2017/09/07 Python
Python基于更相减损术实现求解最大公约数的方法
2018/04/04 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
python之yield和Generator深入解析
2019/09/18 Python
Django restframework 框架认证、权限、限流用法示例
2019/12/21 Python
java字符串格式化输出实例讲解
2021/01/06 Python
美国祛痘、抗衰老药妆品牌:Murad
2016/08/27 全球购物
澳大利亚冲浪和时尚服装网上购物:SurfStitch
2017/07/29 全球购物
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
伦敦新晋轻奢耳饰潮牌:Tada & Toy
2020/05/25 全球购物
自我评价200字分享
2013/12/17 职场文书
公司端午节活动方案
2014/02/04 职场文书
《中彩那天》教学反思
2014/02/22 职场文书
房地产开发项目建议书
2014/05/16 职场文书
英语分层教学实施方案
2014/06/15 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
2015高三毕业寄语赠言
2015/02/27 职场文书
《西门豹》教学反思
2016/02/23 职场文书
Python答题卡识别并给出分数的实现代码
2021/06/22 Python
MySQL去除密码登录告警的方法
2022/04/20 MySQL