详解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使用循环实现批量创建文件夹示例
Mar 25 Python
Python和perl实现批量对目录下电子书文件重命名的代码分享
Nov 21 Python
python开发之文件操作用法实例
Nov 13 Python
python select.select模块通信全过程解析
Sep 20 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 Python
Python中new方法的详解
Jan 15 Python
Python 实现域名解析为ip的方法
Feb 14 Python
PyTorch-GPU加速实例
Jun 23 Python
Python爬取网页信息的示例
Sep 24 Python
python使用scapy模块实现ping扫描的过程详解
Jan 21 Python
jupyter notebook指定启动目录的方法
Mar 02 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 Opcache安装和配置方法介绍
2015/05/28 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
PHP常用字符串函数用法实例总结
2020/06/04 PHP
Prototype中dom对象方法汇总
2008/09/17 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
JavaScript 保护变量不被随意修改的实现代码
2017/09/27 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
Python中对列表排序实例
2015/01/04 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
PyCharm在win10的64位系统安装实例
2017/11/26 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
微信跳一跳python代码实现
2018/01/05 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
Scrapy框架基本命令与settings.py设置
2020/02/06 Python
python绘制动态曲线教程
2020/02/24 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
python-地图可视化组件folium的操作
2020/12/14 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
PHP如何设置和取得Cookie值
2015/06/30 面试题
高中班长自我鉴定
2013/12/20 职场文书
美发店5.1活动方案
2014/01/24 职场文书
公司采购主管岗位职责
2014/06/17 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
汽车转让协议书范本
2014/12/07 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
管辖权异议上诉状
2015/05/23 职场文书
vue实现在data里引入相对路径
2022/06/05 Vue.js
SQL bool盲注和时间盲注详解
2022/07/23 SQL Server