详解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实现ftp客户端示例分享
Feb 17 Python
python实现给数组按片赋值的方法
Jul 28 Python
Python实现两个list求交集,并集,差集的方法示例
Aug 02 Python
简单了解python的内存管理机制
Jul 08 Python
python3 mmh3安装及使用方法
Oct 09 Python
基于Python实现人脸自动戴口罩系统
Feb 06 Python
python 伯努利分布详解
Feb 25 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
Apr 09 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
May 09 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 Python
Python 按比例获取样本数据或执行任务的实现代码
Dec 03 Python
python matlab库简单用法讲解
Dec 31 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
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
php 处理上百万条的数据库如何提高处理查询速度
2010/02/08 PHP
apache+php+mysql安装配置方法小结
2010/08/01 PHP
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
2017/02/05 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
JS模拟自动点击的简单实例
2013/08/08 Javascript
对比分析json及XML
2014/11/28 Javascript
AngularJS ng-app 指令实例详解
2016/07/30 Javascript
利用Node.js+Koa框架实现前后端交互的方法
2017/02/27 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
ReactNative中使用Redux架构总结
2017/12/15 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
JavaScript实现新年倒计时效果
2018/11/17 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
Python闭包实现计数器的方法
2015/05/05 Python
python 生成图形验证码的方法示例
2018/11/11 Python
python实现坦克大战
2020/04/24 Python
Django自定义YamlField实现过程解析
2020/11/11 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
Sam’s Club山姆会员商店:沃尔玛旗下高端会员制商店
2017/01/16 全球购物
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
英国在线花园中心:You Garden
2018/06/03 全球购物
2014物价局群众路线对照检查材料思想汇报
2014/09/21 职场文书
2015年学生会部门工作总结
2015/04/21 职场文书
被告代理词范文
2015/05/25 职场文书
大学体育课感想
2015/08/10 职场文书
零基础学java之循环语句的使用
2022/04/10 Java/Android