python 直接引用、浅拷贝、深拷贝的区别

1. 简述

简单来讲,直接引用所指向的地址是原对象的地址,深拷贝所指向的是新对象的地址,浅拷贝介于二者之间,原对象的直接子对象为新,子孙对象为原子孙对象。

下面用两个变量 a、b,一个字典对象 {'aaa': 'asd', 'bbb': [1, 2, 3]}(暂时用 DICT 标识)来具体说明。

2. 直接引用

如果 a、b 都是直接引用(a = DICT;b = DICT),则两个变量指向的是同一个对象 DICT,a 与 b 都可以用来改变 DICT 的值; 如下图所示:

3. 浅拷贝

如果 a 是直接引用,b 为浅拷贝(a = DICT;b = DICT.copy()),则变量 b 指向另一个对象 DICT_2,DICT_2 将 DICT 中不可变对象的值进行拷贝,可变对象的值直接引用。 即 DICT_2 中 键aaa 指向的对象与 DICT中 键aaa 指向的不是同一个对象,键bbb 指向的对象与 DICT中 键bbb 指向的是同一个对象,修改 b['bbb'] 会影响到 DICT 的值。 如下图所示:

4. 深拷贝

深拷贝可以用 copy 库的 deepcopy 函数实现。

如果 a 是直接引用,b 为深拷贝(a = DICT;b = copy.deepcopy(DICT)),则变量 b 指向另一个对象 DICT_2,DICT_2 将 DICT 中所有对象的值进行拷贝。 即 DICT_2中 键bbb 指向的对象与 DICT中 键bbb 指向的不是同一个对象,修改 b['bbb'] 不会影响 DICT 的值。 如下图所示:

相关推荐
咕白m6254 小时前
Python 实现 PDF 页面旋转
python
c***87195 小时前
Flask:后端框架使用
后端·python·flask
Q_Q5110082856 小时前
python+django/flask的情绪宣泄系统
spring boot·python·pycharm·django·flask·node.js·php
撸码猿6 小时前
《Python AI入门》第9章 让机器读懂文字——NLP基础与情感分析实战
人工智能·python·自然语言处理
二川bro7 小时前
多模态AI开发:Python实现跨模态学习
人工智能·python·学习
2301_764441337 小时前
Python构建输入法应用
开发语言·python·算法
love530love7 小时前
【笔记】ComfUI RIFEInterpolation 节点缺失问题(cupy CUDA 安装)解决方案
人工智能·windows·笔记·python·插件·comfyui
青瓷程序设计7 小时前
昆虫识别系统【最新版】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积神经网络算法
人工智能·python·深度学习
秋邱8 小时前
智启未来:AGI 教育融合 × 跨平台联盟 × 个性化空间,重构教育 AI 新范式开篇:一场 “教育 ×AI” 的范式革命
人工智能·python·重构·推荐算法·agi
爱吃泡芙的小白白8 小时前
vscode、anaconda、git、python配置安装(自用)
ide·git·vscode·python·anaconda·学习记录