博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python的深拷贝与浅拷贝
阅读量:2441 次
发布时间:2019-05-10

本文共 1640 字,大约阅读时间需要 5 分钟。

Python的深拷贝与浅拷贝

Python中的赋值一般是传递对象的引用,修改一个对象,会导致其他对象也受到改变

python的copy模块提供了拷贝的函数,可以进行浅拷贝和深拷贝

copy模块提供了两个函数:

copy.copy(x) 返回x的浅拷贝,只拷贝x对象,不拷贝x内部的子对象

copy.deepcopy(x) 返回x的深拷贝,拷贝x对象及其子对象

实例:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2017/7/23 21:05# @File    : copy1.py#深拷贝与浅拷贝import copysublist = ['a', 'b', 'c']mylist  = list(range(6))mylist.append(sublist)shallow_list = copy.copy(mylist)deep_list = copy.deepcopy(mylist)print('original ')print('mylist ', mylist)print('shallow_list', shallow_list)print('deep_lis', deep_list)mylist.append(6)print("\nmylist append 6")print('mylist ', mylist)print('shallow_list', shallow_list)print('deep_list', deep_list)sublist.append('d')print("\nsublist append 'd'")print('mylist ', mylist)print('shallow_list', shallow_list)print('deep_list', deep_list)

输出:

F:\python\python.exe E:/Python工作空间/model/copy/copy1.pyoriginal ('mylist ', [0, 1, 2, 3, 4, 5, ['a', 'b', 'c']])('shallow_list', [0, 1, 2, 3, 4, 5, ['a', 'b', 'c']])('deep_lis', [0, 1, 2, 3, 4, 5, ['a', 'b', 'c']])mylist append 6('mylist ', [0, 1, 2, 3, 4, 5, ['a', 'b', 'c'], 6])('shallow_list', [0, 1, 2, 3, 4, 5, ['a', 'b', 'c']])('deep_list', [0, 1, 2, 3, 4, 5, ['a', 'b', 'c']])sublist append 'd'('mylist ', [0, 1, 2, 3, 4, 5, ['a', 'b', 'c', 'd'], 6])('shallow_list', [0, 1, 2, 3, 4, 5, ['a', 'b', 'c', 'd']])('deep_list', [0, 1, 2, 3, 4, 5, ['a', 'b', 'c']])Process finished with exit code 0

总结

本文介绍了对象的赋值和拷贝,以及它们之间的差异:

Python中对象的赋值都是进行对象引用(内存地址)传递

使用copy.copy(),可以进行对象的浅拷贝,它复制了对象,但对于对象中的元素,依然使用原始的引用

如果需要复制一个容器对象,以及它里面的所有元素(包含元素的子元素),可以使用copy.deepcopy()进行深拷贝

对于非容器类型(如数字、字符串、和其他’原子’类型的对象)没有被拷贝一说

如果元祖变量只包含原子类型对象,则不能深拷贝,看下面的例子

转载地址:http://wtcqb.baihongyu.com/

你可能感兴趣的文章
debian 服务器_使用Debian 10进行初始服务器设置
查看>>
joi 参数验证_使用Joi进行节点API架构验证
查看>>
react-notifications-component,一个强大的React Notifications库
查看>>
如何在Debian 10上设置SSH密钥
查看>>
如何在Debian 10上安装Node.js
查看>>
配置管理规范 配置管理计划_配置管理简介
查看>>
如何在Ubuntu 18.04上添加和删除用户
查看>>
angular4前后端分离_如何在Angular 4+中使用Apollo客户端GraphQL
查看>>
如何在Ubuntu 18.04上安装Apache Kafka
查看>>
如何在Ubuntu 20.04上安装R [快速入门]
查看>>
debian tomcat_如何在Debian 10上安装Apache Tomcat 9
查看>>
如何为Python 3设置Jupyter Notebook
查看>>
docker 容器共享数据_如何在Docker容器之间共享数据
查看>>
express中间件_创建自己的Express.js中间件
查看>>
如何使用远程Docker服务器加快工作流程
查看>>
如何在Ubuntu 20.04上从源代码安装Git [快速入门]
查看>>
flask-login_如何使用Flask-Login向您的应用程序添加身份验证
查看>>
如何在Ubuntu 20.04上安装和配置Nextcloud
查看>>
react前端ui的使用_如何使用React和Semantic UI创建多步骤表单
查看>>
chrome开发者工具_如何使用Chrome开发者工具查找性能瓶颈
查看>>