详解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实现将文本转换成语音的方法
May 28 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
Jul 04 Python
分分钟入门python语言
Mar 20 Python
使用pandas对矢量化数据进行替换处理的方法
Apr 11 Python
pandas多级分组实现排序的方法
Apr 20 Python
Python多进程入门、分布式进程数据共享实例详解
Jun 03 Python
seek引发的python文件读写的问题及解决
Jul 26 Python
pandas的to_datetime时间转换使用及学习心得
Aug 11 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 Python
通过代码实例了解Python异常本质
Sep 16 Python
python更新数据库中某个字段的数据(方法详解)
Nov 18 Python
Python可视化神器pyecharts绘制地理图表
Jul 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
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
JavaScript中的私有成员
2006/09/18 Javascript
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
2016/05/05 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
JS只能输入正整数的简单实例
2016/10/07 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
vue axios数据请求及vue中使用axios的方法
2018/09/10 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
uniapp与webview之间的相互传值的实现
2020/06/29 Javascript
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
python利用platform模块获取系统信息
2020/10/09 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
微信小程序之html5 canvas绘图并保存到系统相册
2019/06/20 HTML / CSS
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
经理职责范文
2013/11/08 职场文书
初中生考试作弊检讨书
2014/12/14 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
写给媳妇的检讨书
2015/05/06 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
MySQL悲观锁与乐观锁的实现方案
2021/11/02 MySQL
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL