详解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 __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
Python中super关键字用法实例分析
May 28 Python
在Linux系统上安装Python的Scrapy框架的教程
Jun 11 Python
Python写的一个简单监控系统
Jun 19 Python
在Apache服务器上同时运行多个Django程序的方法
Jul 22 Python
Python实现周期性抓取网页内容的方法
Nov 04 Python
Linux下为不同版本python安装第三方库
Aug 31 Python
TensorFlow损失函数专题详解
Apr 26 Python
如何理解Python中包的引入
May 29 Python
python和JavaScript哪个容易上手
Jun 23 Python
Python+unittest+DDT实现数据驱动测试
Nov 30 Python
详解Selenium 元素定位和WebDriver常用方法
Dec 04 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
乐信RP2100的电路分析和打磨
2021/03/02 无线电
php 去除html标记--strip_tags与htmlspecialchars的区别详解
2013/06/26 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
php四种定界符详解
2017/02/16 PHP
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
js模仿jquery的写法示例代码
2013/06/16 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
DOM节点删除函数removeChild()用法实例
2015/01/12 Javascript
使用jquery操作session方法分享
2015/01/22 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
vue element 关闭当前tab 跳转到上一路由操作
2020/07/22 Javascript
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
windows下安装Python和pip终极图文教程
2017/03/05 Python
Python用 KNN 进行验证码识别的实现方法
2018/02/06 Python
Pytorch之contiguous的用法
2019/12/31 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
文明学生事迹材料
2014/01/29 职场文书
庆元旦广播稿
2014/02/10 职场文书
大学自我评价
2014/02/12 职场文书
劳动工资科岗位职责范本
2014/03/02 职场文书
实习指导老师评语
2014/04/26 职场文书
完整版商业计划书
2014/09/15 职场文书
护林员个人总结
2015/03/04 职场文书
兴趣班停课通知
2015/04/24 职场文书
解除合同协议书范本
2016/03/21 职场文书
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript