Python直接赋值、浅拷贝与深度拷贝实例分析


Posted in Python onJune 18, 2019

本文实例讲述了Python直接赋值、浅拷贝与深度拷贝。分享给大家供大家参考,具体如下:

  • 直接赋值:其实就是对象的引用(别名)。
  • 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
  • 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

字典浅拷贝实例

实例

>>>a = {1: [1,2,3]}
>>> b = a.copy()
>>> a, b
({1: [1, 2, 3]}, {1: [1, 2, 3]})
>>> a[1].append(4)
>>> a, b
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})

深度拷贝需要引入 copy 模块:

实例

>>>import copy
>>> c = copy.deepcopy(a)
>>> a, c
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
>>> a[1].append(5)
>>> a, c
({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})

解析

1、b = a: 赋值引用,a 和 b 都指向同一个对象。

Python直接赋值、浅拷贝与深度拷贝实例分析

2、b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。

Python直接赋值、浅拷贝与深度拷贝实例分析

b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。

Python直接赋值、浅拷贝与深度拷贝实例分析

更多实例

以下实例是使用 copy 模块的 copy.copy( 浅拷贝 )和(copy.deepcopy ):

实例

#!/usr/bin/python
# -*-coding:utf-8 -*-
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = a            #赋值,传对象的引用
c = copy.copy(a)      #对象拷贝,浅拷贝
d = copy.deepcopy(a)    #对象拷贝,深拷贝
a.append(5)         #修改对象a
a[4].append('c')      #修改对象a中的['a', 'b']数组对象
print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )

以上实例执行输出结果为:

('a = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])
('b = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])
('c = ', [1, 2, 3, 4, ['a', 'b', 'c']])
('d = ', [1, 2, 3, 4, ['a', 'b']])

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python 文件重命名工具代码
Jul 26 Python
使用python的chardet库获得文件编码并修改编码
Jan 22 Python
windows下wxPython开发环境安装与配置方法
Jun 28 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
python实现2048小游戏
Mar 30 Python
python自动化脚本安装指定版本python环境详解
Sep 14 Python
Django框架 信号调度原理解析
Sep 04 Python
PyTorch使用cpu加载模型运算方式
Jan 13 Python
tensorboard实现同时显示训练曲线和测试曲线
Jan 21 Python
python itsdangerous模块的具体使用方法
Feb 17 Python
python解决12306登录验证码的实现
Apr 18 Python
Python中json.load()和json.loads()有哪些区别
Jun 07 Python
python实现五子棋游戏
Jun 18 #Python
解决python中使用PYQT时中文乱码问题
Jun 17 #Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
Jun 17 #Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
Jun 17 #Python
python3.6根据m3u8下载mp4视频
Jun 17 #Python
python如何实现视频转代码视频
Jun 17 #Python
python批量爬取下载抖音视频
Jun 17 #Python
You might like
php+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
2007/03/07 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
2009/09/30 PHP
PHP SEO优化之URL优化方法
2011/04/21 PHP
php 启动时报错的简单解决方法
2014/01/27 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
js常见表单应用技巧
2008/01/09 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
Js实现无刷新删除内容
2015/04/29 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
Python中的迭代器漫谈
2015/02/03 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
Python pandas库中的isnull()详解
2019/12/26 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
pandas实现导出数据的四种方式
2020/12/13 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
Douglas意大利官网:购买香水和化妆品
2020/05/27 全球购物
国际花店:Pickup Flowers
2020/04/10 全球购物
英语师范专业毕业生自荐信
2013/09/21 职场文书
电子邮箱格式怎么写
2014/01/12 职场文书
护理工作感言
2014/01/16 职场文书
重点工程汇报材料
2014/08/27 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
拖欠货款起诉状
2015/05/20 职场文书
canvas绘制折线路径动画实现
2021/05/12 Javascript
利用Python+OpenCV三步去除水印
2021/05/28 Python
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python