python 中赋值,深拷贝,浅拷贝的区别

作者:karsa__ 时间:2022-11-15 09:35:44 

  • 赋值:其实就是对象的引用(相当于取别名)。

  • 浅拷贝(copy):拷贝父对象,不会拷贝对象内部的子对象,会引用子对象。

  • 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

一、赋值实例

# a这个大列表是一个父对象,里面的小列表是a的一个子对象
a = [1, 2, 3, ["a", "b"]]
# 赋值实例
b = a
print("a:", a)
print("b:", b)
## 打印结果
a: [1, 2, 3, ['a', 'b']]
b: [1, 2, 3, ['a', 'b']]

解析:

b = a: 赋值引用,a 和 b 都指向同一个对象,所以得到的结果都一样

二、浅拷贝实例

# 浅拷贝实例
a = [1, 2, 3, ["a", "b"]]
c = a.copy()
# 第一次打印
print("a:", a)
print("c:", c)
# 给a对象中的子对象添加元素
a[3].append("c")
print("a:", a)
print("c:", c)
# 给a这个父对象添加元素
a.append(4)
print("a:", a)
print("c:", c)

## 打印结果
a: [1, 2, 3, ['a', 'b']]
c: [1, 2, 3, ['a', 'b']]
a: [1, 2, 3, ['a', 'b', 'c']]
c: [1, 2, 3, ['a', 'b', 'c']]
a: [1, 2, 3, ['a', 'b', 'c'], 4]
c: [1, 2, 3, ['a', 'b', 'c']]

 解析:

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

三、深拷贝实例

# 深拷贝实例
import copy
a = [1, 2, 3, ["a", "b"]]
d = copy.deepcopy(a)
# 第一次打印
print("a:", a)
print("d:", d)
# 给a对象中的子对象添加元素
a[3].append("c")
print("a:", a)
print("d:", d)
# 给a这个父对象添加元素
a.append(4)
print("a:", a)
print("d:", d)

## 打印结果
a: [1, 2, 3, ['a', 'b']]
d: [1, 2, 3, ['a', 'b']]
a: [1, 2, 3, ['a', 'b', 'c']]
d: [1, 2, 3, ['a', 'b']]
a: [1, 2, 3, ['a', 'b', 'c'], 4]
d: [1, 2, 3, ['a', 'b']]

解析:

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

来源:https://blog.csdn.net/karsa__/article/details/123506526

标签:python,赋值,深拷贝,浅拷贝
0
投稿

猜你喜欢

  • python实现感知器算法详解

    2022-04-29 15:08:43
  • 5分钟快速掌握Python定时任务框架的实现

    2023-05-31 10:19:45
  • MySQL 句柄数占用过多的解决方法

    2024-01-29 12:31:06
  • 卸载tensorflow-cpu重装tensorflow-gpu操作

    2022-07-31 12:46:13
  • 使用php操作xml教程

    2023-06-14 03:10:45
  • 网页设计详细教程之XML简便省力技巧五则

    2008-05-23 14:37:00
  • scrapy-redis分布式爬虫的搭建过程(理论篇)

    2022-04-25 20:49:25
  • python模块之paramiko实例代码

    2022-08-08 08:34:51
  • js 数据存储和DOM编程

    2024-02-24 07:52:31
  • Windows环境下vscode-go安装笔记(不支持32位)

    2024-04-25 15:01:40
  • 一文搞懂MySQL元数据锁(MDL)

    2024-01-14 18:29:08
  • python远程登录代码

    2022-09-12 15:48:15
  • python自动化测试通过日志3分钟定位bug

    2021-09-12 10:11:19
  • Pytorch中torch.flatten()和torch.nn.Flatten()实例详解

    2021-09-15 06:39:43
  • python pyqtgraph 保存图片到本地的实例

    2023-05-08 01:15:11
  • 解决vue3打包过后空白页面的情况

    2024-05-09 10:43:00
  • SQL2000个人版 应用程序正常初始化失败0乘以C0000135失败

    2024-01-27 05:09:39
  • Django REST Framework之频率限制的使用

    2021-01-25 17:59:42
  • 详解Golang 与python中的字符串反转

    2021-08-01 23:31:08
  • ASP.NET中使用SQL存储过程的方法

    2007-08-24 09:31:00
  • asp之家 网络编程 m.aspxhome.com