详解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 21 Python
详解Python读取配置文件模块ConfigParser
May 11 Python
Python中模块pymysql查询结果后如何获取字段列表
Jun 05 Python
人机交互程序 python实现人机对话
Nov 14 Python
使用python绘制二元函数图像的实例
Feb 12 Python
Python对HTML转义字符进行反转义的实现方法
Apr 28 Python
Python使用itchat 功能分析微信好友性别和位置
Aug 05 Python
python集合的创建、添加及删除操作示例
Oct 08 Python
python输出数组中指定元素的所有索引示例
Dec 06 Python
了解一下python内建模块collections
Sep 07 Python
Python中pass的作用与使用教程
Nov 13 Python
Python基于template实现字符串替换
Nov 27 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
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
php编写的简单页面跳转功能实现代码
2013/11/27 PHP
必须收藏的23个php实用代码片段
2016/02/02 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
YII框架http缓存操作示例
2019/04/29 PHP
js文字滚动停顿效果代码
2008/06/28 Javascript
Tab页界面,用jQuery及Ajax技术实现
2009/09/21 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
纯Javascript实现ping功能的方法
2015/03/20 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
2015/11/01 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
2017/07/17 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
js针对图片加载失败的处理方法分析
2019/08/24 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
Vue使用鼠标在Canvas上绘制矩形
2020/12/24 Vue.js
Python中操作MySQL入门实例
2015/02/08 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
记录Python脚本的运行日志的方法
2019/06/05 Python
PyTorch中Tensor的拼接与拆分的实现
2019/08/18 Python
浅谈Python type的使用
2019/11/19 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
理工科学生的自我评价
2013/12/15 职场文书
环保建议书100字
2014/05/14 职场文书
工地宣传标语
2014/06/18 职场文书
个人委托书范文
2015/01/28 职场文书
横空出世观后感
2015/06/09 职场文书
PYTHON InceptionV3模型的复现详解
2022/05/06 Python